10.數據庫對象----表(table)
創建刪除修改表見數據庫語言分類
單表查詢
語法: select *|字段列表|表達式 【into】result_name from table name where() order by 字段名
字段
* :是查詢所有字段, 查詢速度慢
字段列表 : 顯示要求的字段
表達式:
運算符
加減乘除
函數:
函數很多,也可以自定義
別名
字段: 字段的別名加不加as無所謂
表: 表的別名不能加as
加別名時如果有空格,必須用雙引號
order by:
默認升序,默認寫了一個 asc
後面加 desc 則爲降序
order by後面跟着兩個字段(多個字段),以‘,’間隔
先把第一個字段按規則排,如果有重複的,重複的按第二個字段的規則排序
如果沒有重複的,則已經排好序了
可以跟字段名,也可以跟字段的別名
去重 distinct
只有一個字段在字段名前加distinct,可以實現去除該字段的重複數據
如果後面是字段列表,則必須是字段列表對應的一列數據出現重複,纔去重複
distinct必須緊跟select
where
原理:where 先執行前面的查詢語句,再用每條數據判斷是否滿足,滿足則放到結果容器中,結束後返回結果容器中的數據
between A and B
從A到B(是一個連續的範圍)
A是小的,B是大的
包括A和B
in(A,B,...)
在A,B,......中(是一個個的點)
只有A B選項
like ’...‘
%是通配符,匹配多個
‘C%’:以C開頭
‘%C%’:中間有C
_,:匹配一個
‘C_’: 以C開頭,長度爲2
escape ‘ %0% ’
例子:
select * from books where author like '%0%%' escape '0'
如果要查詢的數據是一個通配符,在該數據前加一個標記,讓數據正常被查詢
is
如果要查詢的數據爲空,用is null,不能用 =
如果要查詢的數據不爲空,用 is not null
其他
=,>,<,>=,<=,
邏輯
and,or
優先級
and 比 or 高
into AA
將查出的數據存入到AA中
select id into stu_id from student
如果有多個
select name,age into name,age from users
into 前面是列名,後面是變量,對應
連字運算符
||
把兩個字段連起來
取餘運算符
MOD(A,B):A是被除數, B是除數,結果是餘數
只管整數部分,小數部分直接寫在整數部分餘數的後面
A/B:結果是商
Oracle中時間可以加減,不能乘除
加的單位是天
只有別名,用雙引號
子查詢
什麼是子查詢:查詢中的查詢, 一般使用括號將子查詢sql括起來
括號的優先級最高
什麼時候用子查詢
當在查詢過程中需要知道一個已知量的不確定數據時使用子查詢
--查詢用戶名爲wangjie的所有地址 select address from address where (select id from users where user_name = 'wangjie')=user_id;
怎麼使用子查詢
=: 如果子查詢只返回一個結果,可以使用=,也可以用in,但是如果確定子查詢永遠只返回一個結果則不建議使用in
in: 相當於or連接多個條件
--獲取到身份中證中含有1 的用戶地址 ---in 的使用 select address from address where user_id in (select id from users where certification like '%1%');
any 不會單獨使用, 配合>=<使用
--查詢比王姓學員年齡其中一個大的學員信息 select * from student where age > any(select age from student where name like '王%'); --可以使用some
<any:小於子查詢的任何(某)一個, 即小於子查詢的最大值就好
age < any (36,28,15) 只需要小於 36 即可
>any: 大於子查詢結果中的任何一個, 即大於子查詢的最小值就行
age > any (36,28,15) 此時age只需要大於15即可
=any: 等於子查詢結果中的任何一個,等同於in
any運算符等同於some運算符
all :配合>=<使用
查詢比王姓學員年齡都大的學員信息 select * from student where age > all(select age from student where name like '王%');
<all:小於子查詢中所有的值,小於子查詢中最小的值
age < all(36,28,15) 即小於最小的15
>all :大於子查詢的所有的值,即 大於子查詢中最大的值
age > all (15,28,36) 即大於最大的36
多表查詢
多張表聯合查詢
分類
外連接
· 返回: 滿足條件的所有數據及主表中不滿足條件的數據
left 【 outer 】jion table_name on 條件
例: 查詢所有地址信息,要求顯示每條地址的用戶名,姓名,Email,地址信息
select u.user_name,a.name,a.mobile,a.address from address a left join users u on u.id = a.user_id;
right 【 outer 】 jion table_name on 條件
select u.user_name,a.name,a.mobile,a.address from address a right join users u on u.id = a.user_id;
full jion: 查詢出來的數據沒有意義
返回滿足條件的所有數據,及兩表中不滿足條件的數據
select * from users u full join addresses a on u.user_id = a.user_id
內連接: 返回兩個表都滿足連接條件(只有滿足條件的數據纔是想要的)
inner jion
select * from users u inner join addresses a on u.user_id = a.user_id
也可以使用等值連接
select * from users u,addresses a where u.user_id = a.user_id
交叉連接
特點:
返回兩(兩表列數乘積)條數據
笛卡爾積
select * from table_a cross jion table_b
select * from users cross join addresses
注意:
主表,如果一個表爲主表,則在進行左右連接查詢時,會將該表所有數據查詢出來
如何區分主表
以left和right關鍵字爲參照,以left和right關鍵字的含義來判斷
left 左邊的表是主表
right 右邊的是主表
什麼時候使用
當進行這樣查詢的時候,就需要左右連接: 顯示一個表的所有數據,並且顯示另一個表的部分數據
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.