SQL语句(DQL)
生活随笔
收集整理的這篇文章主要介紹了
SQL语句(DQL)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- DQL準備工作和語法
- 語法
- 簡單查詢
- 條件查詢
- 排序查詢
- 聚合查詢
- 分組查詢
- 條數限制查詢
DQL準備工作和語法
準備工作
#創建商品表: create table product( pid int primary key, pname varchar(20), price double, category_id varchar(32) ); INSERT INTO product(pid,pname,price,category_id) VALUES(1,'聯 想',5000,'c001'); INSERT INTO product(pid,pname,price,category_id) VALUES(2,'海 爾',3000,'c001'); INSERT INTO product(pid,pname,price,category_id) VALUES(3,'雷 神',5000,'c001'); INSERT INTO product(pid,pname,price,category_id) VALUES(4,'JACK JONES',800,'c002'); INSERT INTO product(pid,pname,price,category_id) VALUES(5,'真維 斯',200,'c002'); INSERT INTO product(pid,pname,price,category_id) VALUES(6,'花花公 ?',440,'c002'); INSERT INTO product(pid,pname,price,category_id) VALUES(7,'勁 霸',2000,'c002'); INSERT INTO product(pid,pname,price,category_id) VALUES(8,'?奈 ?',800,'c003'); INSERT INTO product(pid,pname,price,category_id) VALUES(9,'相宜本 草',200,'c003'); INSERT INTO product(pid,pname,price,category_id) VALUES(10,'? 霸',5,'c003'); INSERT INTO product(pid,pname,price,category_id) VALUES(11,'好想你 棗',56,'c004'); INSERT INTO product(pid,pname,price,category_id) VALUES(12,'?飄飄奶 茶',1,'c005'); INSERT INTO product(pid,pname,price,category_id) VALUES(13,'果9',1,NULL);語法
select [distinct] * | 列名,列名 from 表 where 條件簡單查詢
-- 查詢所有的商品. SELECT * from product; -- 查詢商品名和商品價格. select pname,price from product; -- 查詢價格,去掉重復值. select DISTINCT price from product; -- 查詢結果是表達式(運算查詢):將所有商品的價格+10元進?顯示. select pname,price+10 from product; -- 別名查詢.使?的關鍵字是as(as可以省略的).列別名 select pname,price+10 as '價格' from product; select pname,price+10 '價格' from product; -- 別名查詢.使?的關鍵字是as(as可以省略的).表別名 select * from product as p; select * from product p;條件查詢
| BETWEEN…AND… | 顯示在in列表中的值,例:in(100,200) | |
| LIKE ‘字符’ | 模糊查詢,like語句中,% 代表零個或多個任意字符,_ 代表?個字符, 例如: first_name like ‘_a%’; | |
| IS NULL | 判斷是否為空 | |
| 邏輯運?符 | and | 多個條件同時成? |
| or | 多個條件任?成? | |
| not | 不成?,例: where not(salary>100); |
排序查詢
通過order by語句,可以將查詢出的結果進?排序。暫時放置在select語句的最后。
- 格式:
聚合查詢
之前我們做的查詢都是橫向查詢,它們都是根據條件????的進?判斷,?使?聚合函數查詢是縱向查詢,它是對?列的值進?計算,然后返回?個單?的值;另外聚合函數會忽略空值。
今天我們學習如下五個聚合函數:
- count:統計指定列不為NULL的記錄?數;
- sum:計算指定列的數值和,如果指定列類型不是數值類型,那么計算結果為0;
- max:計算指定列的最?值,如果指定列是字符串類型,那么使?字符串排序運算;
- min:計算指定列的最?值,如果指定列是字符串類型,那么使?字符串排序運算;
- avg:計算指定列的平均值,如果指定列類型不是數值類型,那么計算結果為0;
練習:
#查詢商品的總條數 select count(*) from product; -- 不推薦 select count(pid) from product; select count(category_id) from product; #查詢價格?于200商品的總條數 select count(*) from product where price>200; #查詢分類為'c001'的所有商品的價格總和 select sum(price) from product where category_id='c001'; #查詢分類為'c002'所有商品的平均價格 select avg(price) from product where category_id='c002'; #查詢商品的最?價格和最?價格 select max(price),min(price) from product;分組查詢
分組查詢是指使?group by字句對查詢信息進?分組。
格式:SELECT 字段1,字段2… FROM 表名 GROUP BY分組字段 HAVING 分組條件;
分組操作中的having?語句,是?于在分組后對數據進?過濾的,作?類似于where條件。
having與where的區別:
- having是在分組操作執?后, 對分組后的數據進?過濾.
where是在分組操作執?前, 對分組前的數據只能使?表原始列進?條件過濾 - having后?可以使? 聚合函數 where后?不可以使? 聚合函數。
- 當?條SQL語句中, 既有where?有 group by \ having時, 先執? where, 再執? group by, 最后執?having
練習
#統計各個分類商品的個數 select category_id,count(*) from product group by category_id; #統計各個分類商品的個數,且只顯示個數?于1的信息 SELECT category_id,count(*) from product GROUP BY category_id HAVING count(*)>1; #統計價格>200元的 各個分類商品的個數,且只顯示個數?于1的信息 -- select * from product where price>200 group by category_id; -- select category_id,count(*) from product where price>200 group by category_id ; select category_id,count(*) from product where price>200 group by category_id HAVING count(*)>1;條數限制查詢
LIMIT是MySQL內置函數,其作?是?于限制查詢結果的條數。
格式: select * from 表名 limit m,n 其中: m是指記錄開始的index,從0開始,表示第?條記錄 n是指從第m+1條開始,取n條。 例如: select * from tablename limit 2,4 -- 即取出第3條?第6條,4條記錄應?場合:分?
分?查詢格式: SELECT * FROM 表名 LIMIT startRow,pageSize; 例如: select * from products limit 0,5; #第??,每?顯示5條。 select * from products limit 5,5; #第??,每?顯示5條。 select * from products limit 10,5; #第三?,每?顯示5條。 select * from products limit startRow,5; #第curPage?,每?顯示5條, startRow 的值如何計算呢? -- 后臺計算出?碼、?數(???) -- 分?需要的相關數據結果分析如下, -- 注意:下?是偽代碼不?于執? int curPage = 2; -- 當前?數 int pageSize = 5; -- 每?顯示數量 int startRow = (curPage - 1) * pageSize; -- 當前?, 記錄開始的位置(?數)計算 int totalSize = select count(*) from products; -- 記錄總數量 int totalPage = Math.ceil(totalSize * 1.0 / pageSize); -- 總?數總結
以上是生活随笔為你收集整理的SQL语句(DQL)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: delete from表名和trunca
- 下一篇: Python3基础 complex re