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 右邊的是主表
                什麼時候使用
                當進行這樣查詢的時候,就需要左右連接:  顯示一個表的所有數據,並且顯示另一個表的部分數據
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章