亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > 文庫 > 正文

SQL中一些小巧但常用的關鍵字小結

2020-10-29 21:46:11
字體:
來源:轉載
供稿:網友

前言

前面的幾篇文章中,我們大體上介紹了 SQL 中基本的創建、查詢語句,甚至也學習了相對復雜的連接查詢和子查詢,這些基本功相信你也一定掌握的不錯,那么本篇則著重介紹幾個技巧方面的關鍵字,能夠讓你更快更有效率的寫出一些 SQL。

下面話不多說了,來一起看看詳細的介紹吧

起別名

在實際的項目中,有時候我們的表名、字段名過于復雜以致于我們的 SQL 寫出來過長、過于復雜,這時候我們往往會通過起別名的方式將一些名字較長、較為復雜的字段或是表名簡化。

我們可以使用別名(Alias)來對數據表或者列進行臨時命名,既然是別名,也就是說并不會修改原表或列的原始名稱,僅僅用于當前查詢的簡介化顯示。

給表起別名:

select * from person as pwhere p.id = 1;

一旦為表執行了別名,那么本次查詢的子查詢語句中都可以直接引用別名替代原表的引用。

給列起別名:

select name as n,age as a from perosn;

除了使用關鍵字 as 來給表或是列起別名外,還可以直接使用空格字符達到同樣的效果,但是個人認為要么全部使用 as 進行別名,要么全部使用空格進行別名,不要交叉使用使得你的 SQL 復雜又難以看懂。

消除重復記錄

有時候,我們的數據庫中會存在兩條完全一樣的數據,我們也叫做冗余數據,當然不希望在查詢數據的時候查出來這么些冗余的重復數據,我們要把它們過濾掉。

LeetCode 上的一道簡單題:

有一個courses 表 ,有: student (學生) 和 class (課程)。

請列出所有超過或等于5名學生的課。

例如,表:

+---------+------------+| student | class  |+---------+------------+| A  | Math  || B  | English || C  | Math  || D  | Biology || E  | Math  || F  | Computer || G  | Math  || H  | Math  || I  | Math  |+---------+------------+

應該輸出:

+---------+
| class   |
+---------+
| Math    |
+---------+

你可以花個一分鐘思考一下,運用我們之前的基本功,應該是不難的。

顯然是需要用到分組的,想要統計每門課有多少人選,就得按照學科進行分組,每個分組內就是該門學科選修的學生記錄。

那么 SQL 語句也就信手拈來了:

select class from coursesgroup by classhaving count(student) >=5 

但是你提交后在海量測試用例下,會返回給你解答錯誤的提示,不信你試試,問題出在哪?

問題就出現在冗余數據這個邊界條件沒有被考慮,如果 A 選了兩次 Math,當我們對 Math 這個分組進行計數時就會多算一次選 Math 的人數,實際上這是不符合邏輯的,我們需要過濾掉那些重復選擇的數據記錄。

解決方案如下:

select class from coursesgroup by classhaving count(distinct student) >=5 

有些人可能看出來了,我們在 count 函數的列參數前添加了一個 distinct 關鍵字,它表示如果 student 列的值重復出現的話只計數一次。

當然,distinct 除了可以在聚合函數中使用外,也可以直接用在查詢語句的列篩選階段,例如:

//取出所有的學生,不允許重復名字的學生同時出現select distinct name from students

連接結果集

UNION 運算符可以將一個或多個 SELECT 語句的結果連接組合成一個結果集,但要求兩個或多個結果具有相同數量的列,列的數據類型相同,舉個例子:

構建一個學生表:

+----+------+----------+-------+| id | name | uNo  | fees |+----+------+----------+-------+| 1 | 張三 | 15263501 | 18000 || 2 | 李四 | 15263506 | 15960 || 3 | 王二 | 15263512 | 2500 |+----+------+----------+-------+

學生表主要有學生的姓名,學號和學費。

構建一個教師表:

+----+--------+------+--------+| id | name | tNo | salary |+----+--------+------+--------+| 1 | 李老師 | 1001 | 10000 || 2 | 楊老師 | 1002 | 15000 || 3 | 曹老師 | 1030 | 5000 |+----+--------+------+--------+

現在有一個需求,需要拿到全校所有人的姓名和編號,包括學生和老師。一般來說,我們兩次 select 查詢就好了,但是沒法合并在一個結果集中顯示,這是一個問題。

于是我們可以使用 union 來連接兩個結果并在一張表中顯示出來:

select name,uNo from studentsunionselect name,tNo from teacher

查詢結果:

+--------+----------+
| name   | uNo      |
+--------+----------+
| 張三   | 15263501 |
| 李四   | 15263506 |
| 王二   | 15263512 |
| 李老師 | 1001     |
| 楊老師 | 1002     |
| 曹老師 | 1030     |
+--------+----------+

看起來是不是直觀了很多,除此之外的是,如果兩個結果集中存在完全重復的數據記錄,合并后的結果集中不會重復出現該數據記錄。

當然了,如果你不需要在合并結果集的時候刪除掉重復的數據行,你可以轉而使用關鍵字 UNION ALL 替代 UNION。

TOP

TOP 子句用于從一張數據表中取回前 N 個或者 X% 的記錄,但是需要注意的是,沒有一個數據庫實現是支持 TOP 的,各自有各自的關鍵字作為替代,例如 MySQL 和 SQLserver 使用 LIMIT 關鍵字,Oracle 使用 ROWNUM 關鍵字。

例如:

select * from students limit 2;

MySQL 數據庫取出前兩條數據,等效的 Oracle 數據庫寫法:

select * from studentsrownum <= 2

以上的一些關鍵字雖然逐個看起來很簡單,但有時候可能會幫上你大忙的,不要忘記使用它們!。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产日韩欧美在线播放| 国产精品电影久久久久电影网| 欧美日韩国产中字| 日韩精品在线免费观看| 欧美亚洲日本网站| 亚洲精品久久久久久下一站| 色诱女教师一区二区三区| 青青久久av北条麻妃海外网| 懂色aⅴ精品一区二区三区蜜月| 中国人与牲禽动交精品| 欧美专区在线视频| 午夜精品一区二区三区在线| 国产91色在线播放| 亚洲精品免费av| 国产91对白在线播放| 亚洲美女黄色片| 精品久久久久久久大神国产| 国产精品一久久香蕉国产线看观看| 国产精品吴梦梦| 日韩av综合中文字幕| 91网站在线免费观看| 色婷婷av一区二区三区久久| 中文字幕精品国产| 久久国产精品影视| 日韩欧美aⅴ综合网站发布| 亚洲国产精品久久久| 亚洲一区二区自拍| 亚洲精品一区中文字幕乱码| 色爱av美腿丝袜综合粉嫩av| 国产精品视频网| 热re91久久精品国99热蜜臀| 久久影院免费观看| 青青草成人在线| 亚洲一区二区精品| 欧美性高潮床叫视频| 高清欧美电影在线| 中文字幕综合在线| 深夜精品寂寞黄网站在线观看| 影音先锋欧美在线资源| 国产精品久久久久免费a∨大胸| 久久久噜噜噜久久中文字免| 欧美美最猛性xxxxxx| 久久久久久美女| 日韩在线国产精品| 久久久在线观看| 成人激情综合网| 成人av在线网址| 欧美激情喷水视频| 亚洲欧洲日产国码av系列天堂| 国内精品模特av私拍在线观看| 久久精品久久久久久国产 免费| 国产视频久久网| 国产精品久久激情| 欧美成人在线免费视频| 一区二区在线免费视频| 欧美一级淫片播放口| 影音先锋欧美在线资源| 欧美午夜影院在线视频| 国产精品福利在线观看| 欧美日韩中文字幕在线视频| 亚洲欧美精品一区二区| 日韩av免费看网站| 亚洲一区二区三区四区在线播放| 久久精品国产欧美亚洲人人爽| 91国内在线视频| 91国产精品电影| 在线精品国产成人综合| 欧美三级免费观看| 国产精品久久久久aaaa九色| 国产精品色婷婷视频| 国产精品老女人视频| 日韩精品免费在线观看| 亚洲精品电影在线| 日本免费在线精品| 久久香蕉国产线看观看av| 国产日韩中文字幕| 亚洲va欧美va国产综合久久| 红桃视频成人在线观看| 国产日韩精品一区二区| 在线视频精品一| 国产精品永久免费| 日韩精品视频在线免费观看| 91探花福利精品国产自产在线| 中文字幕视频在线免费欧美日韩综合在线看| 欧美肥臀大乳一区二区免费视频| 神马国产精品影院av| 欧美重口另类videos人妖| 欧美怡春院一区二区三区| 欧美成人午夜免费视在线看片| 在线观看国产欧美| 中文字幕在线国产精品| 久久久久久久久综合| 国产精品精品一区二区三区午夜版| 国内精品在线一区| 亚洲人成电影在线| 中文字幕av一区| 国产亚洲精品一区二区| 久久全球大尺度高清视频| 亚洲综合av影视| 欧美成人高清视频| 久久综合伊人77777蜜臀| 中日韩美女免费视频网站在线观看| 国产精品亚洲一区二区三区| 91精品国产91久久| 精品偷拍各种wc美女嘘嘘| 亚洲男人天堂古典| 日韩av最新在线观看| 欧美在线日韩在线| 欧美丰满少妇xxxx| www.久久久久| 国产噜噜噜噜噜久久久久久久久| 亚洲美女福利视频网站| 97久久精品国产| 国产v综合ⅴ日韩v欧美大片| 超碰日本道色综合久久综合| 在线观看欧美日韩| 欧美成人激情视频免费观看| 国产综合福利在线| 中国china体内裑精亚洲片| 伊人伊成久久人综合网小说| 欧美高跟鞋交xxxxhd| 日韩亚洲国产中文字幕| 精品久久久中文| 亚洲欧洲国产精品| 久久久久久久久久久av| 中文字幕亚洲一区在线观看| 亚洲精品白浆高清久久久久久| 97视频网站入口| 欧美成人免费全部观看天天性色| 日韩精品丝袜在线| 日韩在线视频中文字幕| 午夜精品蜜臀一区二区三区免费| 免费91麻豆精品国产自产在线观看| 操日韩av在线电影| 91欧美激情另类亚洲| 中国人与牲禽动交精品| 欧洲美女7788成人免费视频| 成人午夜小视频| 欧美剧在线观看| 欧美精品激情在线| 搡老女人一区二区三区视频tv| 国产精品久久一区| 亚洲天堂免费在线| 亚洲精品电影网| 国产精品嫩草影院一区二区| 26uuu日韩精品一区二区| 高清日韩电视剧大全免费播放在线观看| 国产成人精品久久亚洲高清不卡| 91免费电影网站| 国产精品视频播放| 日韩国产在线播放| 国产中文字幕亚洲| 亚洲视频在线观看视频| 伊人成人开心激情综合网| 国产精品久久久久久久久久东京| 色系列之999| 久久影院在线观看| 国产精品九九九| 国产精品av在线| 自拍偷拍亚洲在线| 亚洲成人av中文字幕| 日韩av成人在线观看| 欧美一区二区三区……| 亚洲人成网站色ww在线|