mysql基础(DQL语言、DML语言、DDL语言)详解
DQL語言:數據庫查詢語言
分組查詢:Group by
和分組函數搭配使用:
案例:通過部門編號篩選每個部門的平均工資
分組后篩選:
案例:查詢每個部門人數>2的部門
排序查詢:order by
Select * from 表名 order by 字段名 desc;
DESC:從大到小
ASC:默認從小到大
連接查詢:內連接(等值連接、非等值連接、自連接)、外連接(左外連接、右外連接、全外連接(mysql不支持,orcle支持)、交叉連接)
sql92支持:內連接
sql99支持:內連接、外連接、交叉連接
內連接:等值連接、非等值連接、自連接
等值連接(sql99語法):內連接的結果等于兩表的交集
select 【查詢列表】
from 表A 別名1 (inner) join
表B 別名2
on 1.key=2.key(取交集部分)
外連接:左外連接、右外連接、全外連接(mysql不支持,orcle支持)、交叉連接
左外連接:查詢的結果為主表(左表)中所有的行,如果從表(右表)和它匹配則顯示匹配行,不匹配則顯示null值。
語法:
select 【查詢列表】
from 表A 別名1 left join
表B 別名2
on 1.key=2.key
案例:查詢哪個學生的成績為空
涉及到兩張表,學生表和成績表,其中學生表的stu_id和成績表的stu_id作為連接條件,一般“哪個”后面的字段所在的表為主表,該案例為學生表,所以學生表為主表,左查詢實放在左邊,右查詢時放在右邊
右外連接:查詢主表(右表)中所有的值,從表(左表)中有的顯示表值,沒有的顯示null值
語法:
select 【查詢列表】
from 表A 別名1 right join
表B 別名2
on 1.key=2.key
若要去掉交集部分,添加篩選即可
全外連接:取得兩個表所有的值+交集部分
若要去掉交集部分,
交叉連接:查詢結果為兩張表的笛卡爾乘積
語法:
select 【查詢列表】
from 表1 cross join 表2
子查詢:出現在其他語句中的select語句,稱為子查詢
分類:
- 按出現的位置分類:
select后面:僅僅支持標量子查詢
from后面:支持表子查詢
where和having后面:支持標量子查詢(單行)或列子查詢(多行),行子查詢較少
exists后面:支持表子查詢
- 按結果集的行列數分類:
標量子查詢:結果集只有一行一列
列子查詢:結果級只有一列多行
行子查詢:結果集只有一行多列
表子查詢:結果集是多行多列
①where后面的標量子查詢:一般搭配 > < = <>使用
案例:查詢誰的工資比Able高?
案例:查詢哪個部門的最低工資大于50號部門的最低工資?(分組查詢+子查詢)
第一步:查出50號部門的最低工資
第二部查詢每個部門的最低工資(按部門分組查詢最低工資)
SELECT MIN(salary),department_id FROM employees GROUP BY department_id;第三步:查詢是那個部門大于50的最低工資
SELECT MIN(salary),department_id FROM employees GROUP BY department_id HAVING MIN(salary)> (SELECT MIN(salary) FROM employees WHERE department_id=50)②where后面的列子查詢:把子查詢的結果充當篩選條件
一般搭配in、any、all使用
③select后面的子查詢:把子查詢的結果充當查詢列表
案例:查詢每個部門的員工個數
④from后面的子查詢:把子查詢的結果集充當一張表(必須起別名)
案例:查詢每個部門平均工資的工資等級
第一步:查詢每個部門的部門編號和平均工資
第二步:把第一步的結果集當成一張表連接工資登記表進行非等值連接
SELECT av.*,g.grade_level FROM (SELECT AVG(salary) avs,department_id FROM employees GROUP BY department_id) av INNER JOIN job_grades g ON av.avs BETWEEN g.lowest_sal AND g.highest_sal⑤exists后面的子查詢(相關子查詢):一般子查詢都是一個連接查詢
案例:查詢沒有女朋友的男生的信息
方式一:使用外連接查詢
方式二:使用子查詢where+in(select)
SELECT bo.*,FROM boys bo WHERE bo.`id` NOT IN (SELECT beauty.`boyfriend_id` FROM beauty);方式三:使用exists
SELECT bo.* FROM boys bo WHERE NOT EXISTS(SELECT b.`boyfriend_id` FROM beauty b WHERE b.`boyfriend_id`=bo.`id`)DML語言:數據的增刪改
添加語句: insert into(字段1,字段2,字段3,…字段n) 表名 values(值1,值2,值3,…值n),(值1,值2,值3,…值n)
修改語句: update 表名 set 字段1=值1,字段2=值2 where【 篩選條件】
刪除語句:
方式一:delete from 表名 where 【篩選條件】
方式二:truncate table 表名(將表的數據全部刪除)
【面試題】使用刪除語句中,delete和truncate的區別:
- ①delete可以加篩選條件where,truncate不能加
- ②truncate對比delete進行整表刪除時效率較高
- ③delete刪除數據后,再進行添加操作該表的自增id從斷點處開始;而truncate刪除表后,在進行添加操作后該表的自增加id從1開始。
- ④在處理事務時,delete刪除后可以回滾,truncate不能回滾。
DDL語言:數據定義語言(主要涉及庫和表的創建、修改、刪除)
創建:create
語法:create table 表名(字段名 數據類型 【約束】,字段名2 數據類型2 【約束】)
修改:alter
語法:alter table 表名 add|drop|modify|change column 字段名 【字段類型 約束】
刪除:drop
語法:drop table 表名
表的復制:
①只復制表的結構:create table 復制的表名 like 被復制的表名;
②復制表的結構和數據:create table 復制的表名 select * from 被復制的表名
表的創建時涉及到的6大約束:
NOT NULL:該字段不能為空
DEFAULT:設定該字段的默認值
CHECK(字段名 = ?):檢查該字段是否由?組成
PRIMARY KEY:主鍵
FOREIGN KEY:外鍵
UNIQUE:唯一建
#其中主鍵、外鍵、唯一鍵都會自動生成索引
【面試題】主鍵和唯一鍵的區別:
- 兩者都能保證唯一性
- 兩者都可以進行字段組合(但不推薦)
- 主鍵不能為null,唯一鍵可以為null,但只能有一個值為null
- 主鍵一個表中只能有一個,唯一鍵可以有多個
【面試題】外鍵的特點:
- 要求外鍵在從表中設置
- 外鍵的類型和關聯列的類型要求一致或兼容
- 外鍵關聯的列必須為主鍵或唯一鍵
【面試題】自增長列的特點:
- 必須和主鍵和唯一鍵搭配使用
- 一張表至多一個自增長列
- 自增長列的類型只能是數值型
- 可以通過set auto_increment_increment=?設置步長
MySQL 函數分類:
字符函數:
去重:distinct
Select distinct 字段名 from 表名
+:
只做加法運算,不做連接
Concat函數:連接符
Select concat(str1,str2) from 表名
Length函數:獲取參數值的字段個數
Select length(email) from 表名
Upper/lower函數:改變大小寫
Trim函數:去掉字段前后的多余字符
ifnull函數:判斷字段是否為null,如果為null,返回指定值,不為null,返回原始值
isnull函數:判斷字段是否為null,是返回1否返回0
數學函數:
Round函數:四舍五入
Ceil函數:向上取整
Floor函數:向下取整
Truncate函數:保留幾位小數點
Select truncate(1.69999,1)———>1.6
Mod函數:取模
日期函數:
Now函數:返回當前日期和時間
Curdate:返回當前日期
Curtime:返回當前時間
Year(),month(),day(),hour()
Str_to_date(str,str):將日期格式的字符串轉成指定日期
Select str_to_date(‘9-13-1999’,’%m-%d-%Y’)
Date_format(date,str):將日期轉成字符
Select date_format(now(),’%y年%m月%d日’)
DateDiff(date1,date2):比較兩個日期的大小,第一個大,返回正數;第二個大返回負數;相等返回0
條件判斷函數:
If(,):類似java三元運算符
Case salary 工資
When 常量1 then 表達式1
When 常量2 then 表達式2
Else 表達式3
end
分組函數:
Sum
Avg
Max
Min
Conut
總結
以上是生活随笔為你收集整理的mysql基础(DQL语言、DML语言、DDL语言)详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于Spring+SpringMVC+M
- 下一篇: MySQL关于事务控制、视图、存储过程和