數(shù)據(jù)庫MySQL的查詢一、單表查詢
1、條件查詢
select *from test where name='libai'
①查詢名字為李白且年齡為18:select *from test where name='libai' and age=18
②查詢手機號以0結(jié)尾的:select *from test where phone like ‘%0’
③查詢名字中帶小的:select *from test where name like'xiao%';
④查詢名字中帶o的:select *from test where name like '&o%',%表示通配符
2、取別名
表名過長的話可以去一個暫時的別名
select lixin.name from lixin;
select t.name from lixin as t:
臨時表,取別名
二、多表查詢
1、內(nèi)連接
①無條件連接
SELECT * FROM `department` INNER JOIN(內(nèi)連接) `students`;
SELECT * FROM `department` , `students`;
SELECT * FROM `department` CROSS JOIN `students`;
SELECT * FROM `department` JOIN `students`;
以上這個四個SQL的結(jié)果都一樣,都是笛卡爾積,也叫無條件連接/交叉連接等。
②有條件連接
常用select *from department as t inner join student as d on t.d_id=d.dept_id;
select *from department as t,student as d where t_id=d_id;
2、外連接
左連接
表示表格以左邊為主select *from department as t left join student as d on t.d_id=d.dept_id;
右連接
表示表格以右邊為主select *from department as t right join student as d on t.d_id=d.dept_id;
3、多張表連接
select *from department as t right join student as d on t.d_id=d.dept_id inner join stu_detail on d.s_id=stu_datail.stu_id;
取其中的一些字段可以這樣
三、字表查詢
方法一:先將兩張表合為一張表
再將學(xué)院表與臨時表連接
方法二:
我們知道學(xué)院的id就可以查人了
然后執(zhí)行下列操作
首先查你想知道的學(xué)院id
然后執(zhí)行下列操作
四、排序
通常我們創(chuàng)建表排列順序都是按創(chuàng)建的先后
排序用order方法
①從小到大
默認的order就是從小到大
select *from work order by age asc
②從大到小
③限制取值
select *from work order by age desc limit2
如取前2個
④區(qū)間取值
如取第二個和第三個
五、統(tǒng)計
分組是個常見的操作,常用于分組統(tǒng)計,使用GROUP BY后,會按照GROUP BY后面的字段進行分組,且必須是明確的字段,不能是*,因此SELECT后面也不能是*.其次可以使用 HAVING 可以對分組之后的結(jié)果進行篩選,注意:HAVING 后的字段必須是SELECT后出現(xiàn)過的
如果想看每個學(xué)院有多少人,則用group by方法
分組后的統(tǒng)計
六、mysql常用函數(shù)
1.盡量避免整表掃描,如SELECT *
七、
1.盡量避免整表掃描,如SELECT *
2.建立合適的索引
3.使用合適的存儲引擎
4.在JOIN中,盡量用小表LEFT JOIN 大表
5.除非十分必要,盡量不要使用ORDER BY,GROUP BY 和 DISTINCT(去重),盡量用索引來代替
ISTINCT(去重),盡量用索引來代替
盡量用小表LEFT JOIN 大表
5.除非十分必要,盡量不要使用ORDER BY,GROUP BY 和 DISTINCT(去重),盡量用索引來代替
ISTINCT(去重),盡量用索引來代替