mysql高級之子查詢,多表查詢,外連接,集合操作,內部函數與數據控制_月隱學python第24課

目錄

⼀、⾼級

1.1 ⼦查詢

1.2 多表查詢

1.3 外連接

1.4 集合操作

1.5 內部函數

⼆、數據控制

2.1 事務

2.2 授權管理


⼀、⾼級

1.1 ⼦查詢

  • ⼦查詢嵌⼊到其他查詢語句中查詢語句,⼦查詢只能出現在from, where、having中
  • ⼦查詢不要⽤select *,exists除外
     
select title from forum where uid in (select  id from php_user where name = '王坤');

select * from blog_article where cid in(select cid from blog_category where name='心情');

select * from (select uid,username,gender from blog_user where gender='男') as user;

1.2 多表查詢

  • 多表連接必須要有連接條件,否則結果沒有意義
  • 多表連接有兩種寫法:隱式(標準sql)和顯式內連接
  • 隱式(標準sql)連接 : 連接條件寫到where字句中
     
select title,content,name,publish_time
-> from user u,forum f #給表起⼀個別名,⽅便書寫
-> where u.id = f.uid; 在where寫鏈接條件

select title,content,name,publish_time
-> from user u,forum f
-> where u.id = f.uid and name='王琨';

select a.username,b.name ,c.title
-> from bbs_user a,bbs_category b,bbs_forum c
-> where b.cid = c.cid and c.uid = a.uid;
  • 顯示內連接(inner join)

  • 表的⾃身連接
     
select * from areainfo a,areainfo b where a.pid= b.code and a.name='青河縣';

1.3 外連接

兩張表關聯查詢時,根據以那種表爲主可以分爲左外連接和右外連接

  • 左外連接

以左表爲主,如果右邊的表⾥沒有匹配的記錄,則添加⼀個萬能記錄(各個字段都爲null)與之連接

  • 右外連接(right join)

以右表爲主,如果左邊的表裏沒有匹配記錄,則增加一個萬能記錄與之連接

1.4 集合操作

可以使⽤union將兩個查詢結果合併, mysql只⽀持並,不⽀持差和交

  • 兩個結果集中字段數⼀樣,對應字段類型兼容
  • ⾃動去除重複記錄,不去除重複記錄可以⽤ union all
  • order by 放到最後
     

1.5 內部函數

  • 字符串函數

  • ⽇期函數

select DATE_FORMAT(now(),'%Y- %m-%d %H:%i:%s');
  • 數學函數

  • 其它函數

⼆、數據控制

2.1 事務

  • 事務把⼀組操作看做⼀個整體,要不都操作成功,要不都操作失敗 。 (ACID)
  • 表的數據庫引擎必須是innodb, innodb⽀持事物, myisam不⽀持事務
  • 修改表引擎: alter table 表名 engine = innodb
     
-- 查詢是否爲⾃動提交
select @@autocommit  #(1爲⾃動提交 0爲⼿動提交)
-- 關閉⾃動提交
set autocommit = 0
start transaction /begin
-- ⼀組操作
commit/rollback
commit #提交 會把數據寫到硬盤
rollback #回滾 撤銷操作 撤銷從begin到這一條命令之間的操作

2.2 授權管理

  • 創建⽤戶
create user '⽤戶名'@'服務器地址' identified by '密碼'
  • 刪除⽤戶
     
drop user '⽤戶名'@'服務器地址'

修改密碼

  • 刷新
flush privileges


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章