2020 5/9
十九、分頁查詢
應用場景:當要顯示的資料,一頁顯示不全,需要分頁提交sql請求
語法:(執行順序已標出)
SELECT 查詢串列 ⑦每執行一步都會生成一個虛擬的結果集
FROM 表名 ①
[join type join 表2 ②
on 連接條件 ③
where 篩選條件 ④
group by 分組欄位 ⑤
having 分組后的篩選條件 ⑥
order by 排序的字端] ⑧
limit offet,size; ⑨
(offset->要顯示條目的索引(起始索引從0開始),size->顯示的條數)
特點:
① limit陳述句放在查詢陳述句的最后面
② 若不加offset(索引),則默認起始索引為0
③ 公式:要顯示的頁數pags,每頁的條數size
select 查詢串列 from 表名 limit (page-1)*size,size;
#案例1:查詢前五條員工資訊
SELECT * FROM employees LIMIT 0,5;
SELECT * FROM employees LIMIT 5;
#案例2:查詢第11條-第25條
SELECT * FROM employees LIMIT 10,15;
#案例3:查詢有獎金的員工資訊,并且工資較高的前十名顯示出來
SELECT
*
FROM
employees
WHERE
commission_pct IS NOT NULL
ORDER BY
salary DESC
LIMIT 0,
10;
二十、聯合查詢
關鍵字:union(聯合、合并)->將多條查詢結果合并成一個結果
語法:
查詢陳述句1
union
查詢陳述句2
union
……
應用場景:要查詢的結果來自于多個表,且多個表中沒有直接的連接關系,但查詢的資訊一致時
特點:
① 要求多條陳述句查詢的查詢列數是一致的!
② 要求多條查詢陳述句的查詢的每一列的型別和順序最好一致
③ union關鍵字默認是帶去重的,如果使用union all可以包含重復項
#查詢:查詢部門編號大于90或郵箱中包含a的員工資訊
SELECT * FROM employees WHERE department_id>90 OR email LIKE '%a%';
-------------------------------------------------------------
SELECT * FROM employees WHERE department_id >90
UNION
SELECT * FROM employees WHERE email LIKE '%a%';
以上兩種放式等價!!!
#查詢女神表中姓名中有‘周’字的女神名以及男朋友ID和男朋友表中名字有‘鹿’的男生的姓名與ID
SELECT NAME,boyfriend_id FROM beauty WHERE name LIKE '%周%'
UNION
SELECT boyname,id FROM boys WHERE boyname LIKE '%鹿%';

二十一、DML語言(資料操縱語言)
分類:
插入:insert
修改:update
洗掉:delete
#插入陳述句
語法:(方式一》經典插入)
INSERT INTO FROM 表名(列名、列名…) VALUES(值1、值2…);
#1.插入的值型別要與列的型別一致或兼容(可以隱式的轉換)
INSERT INTO beauty(id,name,borndate,phone,photo,boyfriend_id)
VALUES(13,'菜菜','2000-12-28','000000',null,0);(插入一條)
INSERT INTO beauty(id,name,borndate,phone,photo,boyfriend_id)
VALUES(16,'菜菜','2000-12-28','000000',null,0),(14,'MIS詹','2001-5-17','000000',null,0)
,(15,'夢玲','2000-7-24','000000',null,0);(插入多條)
#2.可以為null的列如何插入(不可以為null的列必須插入欄位)
#方式一:直接寫為null
#方式二:在表名后要修改的列名直接不寫
INSERT INTO beauty(id,name,phone,boyfriend_id)
VALUES(17,'汪汪','000000',0);
#列的順序可以顛倒,但在給值時需要一一對應
#插入時,列數和值得個數必須一一對應
#列名可以省略,默認為所有列,而且列的順序與表中列的順序一致
INSERT INTO beauty
VALUES(18,'菜菜','2000-12-28','000000',null,0);
語法:(方式二)
INSERT INTO 表名
SET 列名=值,列名=值…
INSERT INTO beauty
SET id=19,name='hdjk',phone='909090';
插入的兩種方式PK
- 方式一支持多行插入,而方式二不支持
- 方式一支持多行子查詢,而方式二不支持
如下(子查詢)
INSERT INTO beauty(id,name,phone)
SELECT 20,'qqqq','688944';
INSERT INTO beauty(id,name,phone)
SELECT 34,boyname,'688944'
FROM boys
WHERE id =3;
#修改陳述句
1.修改單表的記錄
語法:(執行順序已標出)
update 表名 ①
set 列名=新值,列名=新值,… ③
where 篩選條件; ②
案例:#修改beauty表中姓唐的女神的電話為0000000
UPDATE beauty
SET phone = '0000000'
WHERE name LIKE '周%';
2.修改多表的記錄
語法:(sql92)
update 表1 別名, 表2,別名 ①
set 列名=新值,列名=新值,… ③
where 連接條件 and篩選條件; ②
語法:(sql99)
update 表1 別名
inner|left|right join 表2 別名
on 連接條件
set 列名=新值,列名=新值…
where篩選條件;
(sql99與語法下的)
#案例1:修改張無忌的女朋友的手機號為114[內連接]
UPDATE beauty b
INNER JOIN boys bo
ON b.boyfriend_id = bo.id
SET b.phone = '114'
WHERE bo.boyname='張無忌';
#案例2:修改沒有男朋友的女神的男朋友編號都為2號
UPDATE beauty b
LEFT JOIN boys bo
ON b.boyfriend_id = bo.id
SET b.boyfriend_id=2
WHERE bo.id IS NULL;
#洗掉陳述句
方式一:delete
1.單表的洗掉
語法:delete from 表名 where 篩選條件
2.多表的洗掉
(sql92)
語法:delete 表1別名,表2別名#想洗掉哪個表的資訊就寫那個表,都想洗掉就都寫
from 表1 別名,表2 別名
where 連接條件 and 篩選條件;
(sql99)
語法:
delete 表1別名,表2別名 #想洗掉哪個表的資訊就寫那個表,都想洗掉就都寫
from 表1 別名
inner|left|right join 表2 別名 on 連接條件
where篩選條件;
(sql99與語法下的)
#洗掉張無忌的女朋友的資訊
DELETE b
FROM beauty b
INNER JOIN boys bo
ON b.boyfriend_id = bo.id
WHERE bo.boyName = '張無忌';
#洗掉黃曉明的資訊以及他女朋友的資訊
DELETE b,bo
FROM beauty b
INNER JOIN boys bo
ON b.boyfriend_id = bo.id
WHERE bo.boyName = '黃曉明';
方式二:truncate
語法:
truncate table 表名;(不支持鏈家篩選條件)
TRUNCATE TABLE boys;(直接清空)
兩種洗掉方式PK
- delete可以加篩選條件,truncate不能加
- truncate洗掉,效率高一丟丟
- 假如要洗掉的表中有自增長列,
如果用delete洗掉后,在插入資料,自增長列的值從斷點開始,
而truncate洗掉后,在插入資料,自增長列值從1開始
- truncate洗掉后沒有回傳值,而delete有(即是否顯示表中有幾行收到影響,若是truncate,則都是0)
- truncate洗掉不能回滾,而delete洗掉可以回滾
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/44464.html
標籤:MySQL
