DQL:Data QueryLanguage 資料查詢語言標準語法:
資料庫執行DQL語言不會對資料庫中的資料發生任何改變,而是讓資料庫發送查詢結果到客戶端
查詢回傳的結果其實是一張虛擬表
1 基礎查詢
查詢所有欄位的資料:(table_name指的是表名,欄位就是我們所說的列)
select * from table_name;
查詢指定欄位的資料:(不同欄位之間用,隔開)
select 欄位1,欄位2…from table_name;
2 條件查詢
主要結合where的使用
between…and: 介于…和…之間
and:邏輯與
or:邏輯或
in / not in:類似于Python中的成員運算子
is / is not: 類似于Python中的身份運算子 , 常用語判斷null值, 如:name is null
例:
1、 查詢person表中age大于18且sex為女的所有記錄
select * from person where age >18 and sex=“女”;
2、查詢person表中age在18和50之間的所有資料
select * from person where age between 18 and 50;
3、查詢person表中age為17,18,20的所有資料
select * from person where age=17 or age=18 or age=20;
簡寫:這里可以使用in
select * from person where age in (17,18,20);
4、查詢person表中age不為17,18,20的所有資料
select * from person where age not in (17,18,20);
5、查詢person表中age為null的所有記錄(注意:不能使用=null)
select * from person where age is null;
3. 模糊查詢
where 子句中=表示精準查詢
like:一般情況下結合where子句使用
通配符:
_ : 匹配任意一個字符?
%:匹配0~n個字符
例:
1、查詢person表中name由3個字符組成的所有記錄
select * from person where name like “___”;
2、查詢person表中name以馬開頭的所有記錄
select * from person where name like “馬%”;
3、查詢person表中name包含馬的所有記錄
select * from person where name like “%馬%”;
4. 欄位控制查詢
as: 起別名,用法 :select 欄位 as 別名(就只是顯示的時候欄位名會變為修改后的別名,as可以省略,但為了代碼的完整性和可閱讀性,建議寫上)
select name as 姓名,gender as 性別 from person;
distinct: 去除重復記錄(要對那個欄位進行去重,直接在前面加上distinct就好了)
select distinct 欄位名 from table_name;
5. 排序
order by:指定資料回傳的順序
asc:ascending,升序(默認的,可以不寫)
desc: descending,降序
例:
select * from table_name order name 欄位名 排序方式;
按不同欄位不同排序方式排序,就用,連接,以第一個欄位為主
select * from table_name order by 欄位1 排序方式,欄位2 排序方式…;
6.聚合函式
聚合函式主要用來做縱向運算
count(): 統計指定列不為null的記錄行數
sum():計算指定列的數值和
max():求指定列中的最大值
min():求指定列中的最小值
avg():求指定列的平均值
例:
1、查詢年齡大于18的人數
select count(*) from person where age>18;
2、查詢所有人的年齡和
select sum(age) from person;
3、求最大年齡和最小年齡
select max(age),min(age) from person;
4、查詢所有人的平均年齡
select avg(age) from person;
7.分組查詢
group by:分組查詢
?having和where的區別
- 二者都表示對資料執行條件
- having是在分組之后對資料進行過濾
where是在分組之前對資料進行過濾 - having后面可以使用聚合函式
where后面不可以使用聚合函式
演示:
create table emp(empno int primary key, enname varchar(20), job varchar(20), mgr int, hiredate date, sal double, comm double, deptno int);
insert into emp values(7369,'smith','clark',7902,'1980-12-17',800,null,20);
insert into emp values(7499,'allen','salesman',7698,'1981-02-20',1600,300,30);
insert into emp values(7521,'ward','salesman',7698,'1981-02-22',1250,500,30);
insert into emp values(7566,'jones','managen',7839,'1981-04-02',2975,null,30);
insert into emp values(7654,'martin','salesman',7698,'1981-09-28',1250,1400,30);
insert into emp values(7698,'blake','manager',7839,'1981-05-01',2850,null,30);
insert into emp values(7782,'clark','manageer',7839,'1980-06-17',2450,null,10);
insert into emp values(7788,'scott','analyst',7566,'1987-02-20',3000,null,20);
insert into emp values(7839,'king','president',null,'1987-02-20',5000,null,10);
1、查詢各個部門的人數
mysql> select deptno,count(*) from emp group by deptno;
+--------+----------+
| deptno | count(*) |
+--------+----------+
| 10 | 2 |
| 20 | 2 |
| 30 | 5 |
+--------+----------+
3 rows in set (0.00 sec)
2、查詢每個部門的部門編號和每個部門的工資和
mysql> select deptno,sum(sal) from emp group by deptno;
+--------+----------+
| deptno | sum(sal) |
+--------+----------+
| 10 | 7450 |
| 20 | 3800 |
| 30 | 9925 |
+--------+----------+
3 rows in set (0.00 sec)
3、查詢每個部門的部門編號和每個部門的人數
mysql> select deptno,count(*) from emp group by deptno;
+--------+----------+
| deptno | count(*) |
+--------+----------+
| 10 | 2 |
| 20 | 2 |
| 30 | 5 |
+--------+----------+
3 rows in set (0.00 sec)
4、查詢每個部門的部門編號和每個部門工資大于1500的人數
mysql> select deptno,count(*) from emp where sal>1500 group by deptno;
+--------+----------+
| deptno | count(*) |
+--------+----------+
| 10 | 2 |
| 20 | 1 |
| 30 | 3 |
+--------+----------+
3 rows in set (0.00 sec)
5、查詢工資總和大于7000的部門編號以及工資和
mysql> select deptno,sum(sal) from emp group by deptno having sum(sal)>7000;
+--------+----------+
| deptno | sum(sal) |
+--------+----------+
| 10 | 7450 |
| 30 | 9925 |
+--------+----------+
2 rows in set (0.00 sec)
6、查詢工資大于1500,工資總和大于6000的部門編號和工資和
mysql> select deptno,sum(sal) from emp where sal>1500 group by deptno having sum(sal)>6000;
+--------+----------+
| deptno | sum(sal) |
+--------+----------+
| 10 | 7450 |
| 30 | 7425 |
+--------+----------+
2 rows in set (0.00 sec)
8、分頁查詢
limit:用來限定查詢的起始行,以及總行數
select * from emp limit n,m;
代表從第n+1行開始取,取m行(注意首行為1,不是0哦)
select * from emp limit 0,4;
select * from emp limit 4,4;
select * from emp limit 8,4;
select * from emp limit 12,4;
總結:
查詢陳述句書寫順序:select----》from----》where----》group by-----》having-----》order by----->limit
查詢陳述句執行順序:from----》where-----》group by----》having----》order by ----》select-----》limit
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/262985.html
標籤:其他
上一篇:mysql的常用指令以及增刪改查
下一篇:關系資料庫與非關系型資料庫簡介
