條件查詢就是在查詢時給出WHERE子句序无,在WHERE子句中可以使用如下運算符及關鍵字:
=验毡、!=、<>帝嗡、<晶通、<=、>哟玷、>=狮辽;
BETWEEN…AND;IN(set)巢寡;IS NULL喉脖; AND;OR抑月; NOT树叽;
查詢性別為女,并且年齡50的記錄
SELECT * FROM stu WHERE gender='female' AND age<50;
查詢學號為S_1001谦絮,或者姓名為liSi的記錄
SELECT * FROM stu WHERE sid ='S_1001' OR sname='liSi';
查詢學號為S_1001题诵,S_1002,S_1003的記錄
SELECT * FROM stu WHERE sid IN ('S_1001','S_1002','S_1003');
查詢學號不是S_1001层皱,S_1002性锭,S_1003的記錄
SELECT * FROM tab_student WHERE s_number NOT IN ('S_1001','S_1002','S_1003');
查詢年齡為null的記錄
SELECT * FROM stu WHERE age IS NULL;
查詢年齡在20到40之間的學生記錄
SELECT * FROM stu WHERE age>=20 AND age<=40;
查詢性別非男的學生記錄
SELECT * FROM stu WHERE gender!='male';
或者:或者
SELECT * FROM stu WHERE gender<>'male';
查詢姓名不為null的學生記錄
SELECT * FROM stu WHERE NOT sname IS NULL;
或者:SELECT * FROM stu WHERE sname IS NOT NULL;
模糊查詢需要使用關鍵字LIKE。
通配符:_ 任意一個字母叫胖;%:任意0~n個字母
查詢姓名由5個字母構成草冈,并且第5個字母為“i”的學生記錄
SELECT * FROM stu WHERE sname LIKE '____i';
查詢姓名以“z”開頭的學生記錄
SELECT * FROM stu WHERE sname LIKE 'z%';其中“%”匹配0~n個任何字母。
查詢姓名中第2個字母為“i”的學生記錄
SELECT * FROM stu WHERE sname LIKE '_i%';
查詢姓名中包含“a”字母的學生記錄
SELECT * FROM stu WHERE sname LIKE '%a%';
去重復:SELECT DISTINCT sal FROM emp;表:emp瓮增,重復記錄:sal
查看雇員的月薪與傭金之和:SELECT *,sal+comm FROM emp;comm列有很多記錄的值為NULL怎棱,因為任何東西與NULL相加結果還是NULL,所以結算結果可能會出現(xiàn)NULL绷跑。下面使用了把NULL轉換成數(shù)值0的函數(shù)IFNULL:
SELECT *,sal+IFNULL(comm,0) FROM emp;
給列名添加別名
在上面查詢中出現(xiàn)列名為sal+IFNULL(comm,0)蹄殃,這很不美觀,現(xiàn)在我們給這一列給出一個別名你踩,為total:
SELECT *, sal+IFNULL(comm,0) AS total FROM emp;
給列起別名時诅岩,是可以省略AS關鍵字的:
SELECT *,sal+IFNULL(comm,0)? total FROM emp;
排序
查詢所有學生記錄,按年齡升序排序
SELECT * FROM stu ORDER BY sage ASC;
或者: SELECT * FROM stu ORDER BY sage;
查詢所有學生記錄带膜,按年齡降序排序
SELECT * FROM stu ORDER BY age DESC;
查詢所有雇員吩谦,按月薪降序排序,如果月薪相同時膝藕,按編號升序排序
SELECT * FROM emp ORDER BY sal DESC,empno ASC;
聚合查詢
聚合函數(shù)是用來做縱向運算的函數(shù):
1.COUNT():統(tǒng)計指定列不為NULL的記錄行數(shù)式廷;
查詢emp表中記錄數(shù):
SELECT COUNT(*) AS cnt FROM emp;
查詢emp表中有傭金的人數(shù):
SELECT COUNT(comm) cnt FROM emp;
注意,因為count()函數(shù)中給出的是comm列芭挽,那么只統(tǒng)計comm列非NULL的行數(shù)滑废。
統(tǒng)計月薪與傭金之和大于2500元的人數(shù):
SELECT COUNT(*) AS cnt FROM emp WHERE sal+IFNULL(comm,0) > 2500;
查詢有傭金的人數(shù)蝗肪,以及有領導的人數(shù):
SELECT COUNT(comm), COUNT(mgr) FROM emp;
2.MAX():計算指定列的最大值;
3.MIN():計算指定列的最小值蠕趁;
查詢最高工資和最低工資:
SELECT MAX(sal), MIN(sal) FROM emp;
4.SUM():計算指定列的數(shù)值和薛闪;
查詢所有雇員月薪和:
SELECT SUM(sal) FROM emp;
查詢所有雇員月薪和,以及所有雇員傭金和:
SELECT SUM(sal), SUM(comm) FROM emp;
查詢所有雇員月薪+傭金和:
SELECT SUM(sal+IFNULL(comm,0)) FROM emp;
5.AVG():計算指定列的平均值俺陋;
統(tǒng)計所有員工平均工資:
SELECT AVG(sal) FROM emp;
分組查詢
查詢每個部門的部門編號和每個部門的工資和:
SELECT deptno, SUM(sal) FROM emp GROUP BY deptno;
查詢每個部門的部門編號以及每個部門的人數(shù): SELECT deptno,COUNT(*) FROM emp GROUP BY deptno;
l 查詢每個部門的部門編號以及每個部門工資大于1500的人數(shù):
SELECT deptno,COUNT(*) FROM emp WHERE sal>1500 GROUP BY deptno;
HAVING子句:
having與where的區(qū)別:WHERE是對分組前記錄的條件豁延,如果某行記錄沒有滿足WHERE子句的條件,那么這行記錄不會參加分組腊状;而HAVING是對分組后數(shù)據(jù)的約束诱咏。
查詢工資總和大于9000的部門編號以及工資和:
SELECT deptno, SUM(sal) FROM emp GROUP BY deptno HAVING SUM(sal) > 9000;
LIMIT:LIMIT用來限定查詢結果的起始行,以及總行數(shù)缴挖。
查詢5行記錄袋狞,起始行從0開始:SELECT * FROM emp LIMIT 0, 5;
分頁查詢:
如果一頁記錄為10條,希望查看第3頁記錄應該怎么查呢映屋?
l 第一頁記錄起始行為0苟鸯,一共查詢10行;
l 第二頁記錄起始行為10秧荆,一共查詢10行倔毙;
l 第三頁記錄起始行為20埃仪,一共查詢10行乙濒;
查詢語句書寫順序:select – from- where- group by- having- order by-limit
查詢語句執(zhí)行順序:from - where -group by - having - select - order by-limit
多表查詢有如下幾種:
合并結果集;UNION 卵蛉、? UNION ALL
連接查詢:
1.內連接:[INNER] JOIN ON颁股;
2.外連接OUTER JOIN ON
左外連接 LEFT [OUTER] JOIN
右外連接 RIGHT [OUTER] JOIN
全外連接(MySQL不支持)FULL JOIN
3.自然連接? NATURAL JOIN
4.子查詢
合并結果集
1. 作用:合并結果集就是把兩個select語句的查詢結果合并到一起!
2. 合并結果集有兩種方式:
UNION:去除重復記錄傻丝,例如:SELECT * FROM t1 UNION SELECT * FROM t2甘有;
UNION ALL:不去除重復記錄,例如:SELECT * FROM t1 UNION ALL SELECT * FROM t2葡缰。
3.要求:被合并的兩個結果:列數(shù)亏掀、列類型必須相同
連接查詢
使用主外鍵關系做為條件來去除無用信息
SELECT * FROM emp,dept WHERE emp.deptno=dept.deptno;
上面查詢結果會把兩張表的所有列都查詢出來,也許你不需要那么多列泛释,這時就可以指定要查詢的列了滤愕。
SELECT emp.ename,emp.sal,emp.comm,dept.dname FROM emp,dept
WHERE emp.deptno=dept.deptno;
還可以為表指定別名,然后在引用列時使用別名即可怜校。
SELECT e.ename,e.sal,e.comm,d.dname
FROM emp AS e,dept AS d
WHERE e.deptno=d.deptno间影;
內連接
SELECT * FROM emp e INNER JOIN dept d ON e.deptno=d.deptno;
外連接
1.左連接:SELECT * FROM emp e LEFT OUTER JOIN dept d ON e.deptno=d.deptno;
2.右連接:SELECT * FROM emp e RIGHT OUTER JOIN dept d ON e.deptno=d.deptno;
自然連接
SELECT * FROM emp NATURAL JOIN dept;
SELECT * FROM emp NATURAL LEFT JOIN dept;
SELECT * FROM emp NATURAL RIGHT JOIN dept;
子查詢
子查詢出現(xiàn)的位置:
1.where后,作為條為被查詢的一條件的一部分茄茁;2.from后魂贬,作表巩割;
當子查詢出現(xiàn)在where后作為條件時,還可以使用如下關鍵字:any付燥,all
工資高于JONES的員工
SELECT * FROM emp WHERE sal > (SELECT sal FROM emp WHERE ename='JONES')
查詢工作和工資與MARTIN(馬缎浮)完全相同的員工信息
SELECT * FROM emp WHERE (job,sal) IN (SELECT job,sal FROM emp WHERE ename='MARTIN')
有2個以上直接下屬的員工信息
SELECT * FROM emp WHERE empno IN(
SELECT mgr FROM emp GROUP BY mgr HAVING COUNT(mgr)>=2);
查詢員工編號為7788的員工名稱、員工工資机蔗、部門名稱蒲祈、部門地址
SELECT e.ename, e.sal, d.dname, d.loc FROM emp e, (SELECT dname,loc,deptno FROM dept) d WHERE e.deptno=d.deptno AND e.empno=7788
自連接:自己連接自己,起別名
求7369員工編號萝嘁、姓名梆掸、經(jīng)理編號和經(jīng)理姓名
SELECT e1.empno , e1.ename,e2.mgr,e2.ename FROM emp e1, emp e2 WHERE e1.mgr = e2.empno AND e1.empno = 7369;
導出數(shù)據(jù)
mysqldump –u用戶名 –p密碼 數(shù)據(jù)庫名>生成的腳本文件路徑
恢復數(shù)據(jù)
SOURCE C:\mydb1.sql
或
mysql –u用戶名 –p密碼 數(shù)據(jù)庫<要執(zhí)行腳本文件路徑