select * from總裁;
您也可以在壹個數據行中只選擇壹個數據列。
選擇總統的出生,其中姓氏= '艾森豪威爾';
select語句的壹般形式如下:
選擇您想要的信息。
來自數據表(壹個或多個)
哪裏滿足條件
select語句中有幾個子句,它們的各種組合可以幫助您找出最感興趣的信息。這些從句可以是簡單的,也可以是復雜的。看看作者是如何詳細解釋它們的。
1.使用各種運算符來設置檢索條件。
如果希望select語句只檢索滿足特定條件的記錄,則必須向其中添加where語句來設置數據行的檢索條件。只有這樣,我們才能有選擇地選擇那些值滿足特定要求的數據行。您可以搜索任何類型的值,例如數值。
select * from score where score & gt95;//顯示所有95分以上的信息。
您還可以查找字符串值。
select姓氏,名字from president where姓氏= ' Tom//找出所有姓湯姆的總統。
您還可以對不同類型的值執行組合搜索。
select姓氏,名字,出生,來自總統的州
哪裏出生& lt1950-1-1 '和(state='VA '或state = ' BA ');
//找出1950之前出生在VA或BA的總統。
可以看到算術運算符(+-*/%)和比較運算符(
2、空值的特殊處理
這是壹個不屬於任何類型的值。通常用來表示“無數據”、“未知數據”、“缺失數據”、“超出值範圍的數據”、“與本數據列無關”、“與本數據列中的其他值不同”。在許多情況下,空值非常有用。
我們的各種操作符不能處理空值。如果我們查找相對空值,我們用is null或is not null來判斷,例如:
select姓氏,名字,出生,來自總統的州
死亡是空的;//找到所有沒死的總統。
在某些情況下,NULL值是壹個非常有用的類型,慢慢妳就會明白了。
3、對查詢結果進行排序
壹般來說,如果創建了壹個數據表,並向其中插入了壹些記錄,當發出select * from name命令時,查詢結果中數據記錄的順序通常與插入時的順序相同。這當然符合我們的思維習慣。但這只是“想當然”的假設。事實上,當刪除記錄時,數據庫中會產生壹些空白區域。MYSQL會用新的記錄填充這些區域,也就是說,這個時候這個假設是不正確的。因此,我們必須記住,從服務器返回的記錄行的順序是不能保證的!如果要遵循某個順序,必須使用order by子句來設置這個順序。
select姓氏,名字,出生,來自總統的州
按姓氏排序;//讓總統的名字按字母順序排列。
您也可以設定排列的升序和降序。
select姓氏,名字from總裁
按州順序DESC,姓氏ASC
//首先按出生地降序排列,姓氏按出生地升序排列。
註意:如果結果包含空值,默認情況下,它們總是出現在查詢結果的開頭。
4.限制查詢結果中的數據行數。
這個很簡單,用limit子句就可以了。看兩個例子:
select姓氏,名字,出生,來自總統的州
按生育限制5排序;//就是想看看前5。
按生育限制排序10,5;//從11記錄中返回5條記錄(跳過10條記錄)。
提示:從總統列表中隨機選擇壹位總統進行遊戲:
select姓氏,名字,出生,來自總統的州
order by rand()limit 1;//這是壹種表達式求值方法,在任何地方都適用。
5.評估並命名輸出列。
為了提高效率,MYSQL還可以將表達式的計算結果作為輸出列的值。表達式可以簡單也可以復雜。例如,以下查詢有兩個輸出列。第壹個輸出列對應於壹個非常簡單的表達式(常數),第二個輸出列對應於壹個使用多個算術運算符和兩個函數調用的復雜表達式。
選擇17,格式(sqrt(3*3+4*4),0))
輸出:17 5
再看壹下這個命令:將兩個輸出列合並成壹個。
select concat(first_namem,' ',last_name),concat(city,',',state)from president;
如果合並後輸出列的標題太長,可以給它壹個別名,比如:
選擇concat(名字,' ',姓氏)作為姓名,
concat(城市,',',州)作為出生地
來自總統;這個更漂亮。
6.與日期有關的問題
首先要記住:在MYSQL中,年是第壹位的!我們通常對日期做如下處理:
按日期排序
查找日期或日期範圍
提取日期的年、元、日。
計算兩個日期之間的間隔。
找另壹個有壹次約會的對象。
看看這個例子:
select * from event where date = ' 2002-10-01 '//查看這壹天的考試信息是什麽?
select姓氏,名字,出生,來自總統的州
死亡在哪裏& gt1900-01-01 '和死亡& lt'2000-01-01';//看看上個世紀死了多少人。
年、月、日三個函數,可以分別將年、月、日從日期中分離出來。
select姓氏,名字,總統的出生
其中月份(出生)= 3;//誰是三月出生的?
其中month(出生)=7,dayofmonth(出生)= 6;//7月6日出生的是誰?(湯姆克魯斯?)
to_days函數可以將日期轉換為天數。
select姓氏,名字,出生到_天(死亡)-出生到_天(出生)作為總統的年齡
妳可以看到這些家夥活了多少天!自己改年份吧。
日期值的減法還可以幫助我們計算在特定日期出現的時間,這正是我們用來查找近期需要繳納會費的會員的方法:
select姓氏,名字,成員到期
其中(to _ days(expiration)-to _ days(curdate())& lt;60;//有的人需要在60天內花錢!
7、模式匹配
在某些情況下,模糊查詢是必要的,所以我們可以使用like和not like加上壹個帶通配符的字符串。* * *有兩個通配符“_”(單個字符)和“&;”(多個字符)
選擇concat(名字,' ',姓氏)作為姓名,
其中姓氏類似於“W %”;//找到以W或W開頭的人。
其中姓氏類似於“% W %”;//找到名字以W或W開頭的人。
8.設置和使用SQL變量
MYSQL 3.23.6以上版本可以使用查詢結果設置變量,所以我們可以保存壹些結果以備他用。變量的命名規範為:@name,賦值語法為@name:=value (pascal?)使用起來也很簡單:
select @ birth:=出生於總統
其中last _ name = ' adsltiger//執行完成後,我們將有壹個@birth變量可用。
試試看:
選擇concat(名字,' ',姓氏)作為總統的姓名
哪裏出生& lt@按出生順序出生;//妳看看那些比我大的人!
* 9、生成統計信息
僅靠手工生成統計信息既困難、耗時又容易出錯。如果能熟練掌握用數據庫生成各種統計信息的技巧,它將成為壹種非常強大的信息處理工具。筆者在這裏花了很多時間在這個話題上。為了方便大家理解,我就分解壹下來討論壹下:
9.1找出壹組數據中有多少個不同的值是壹項常見的統計工作,關鍵字distinct可以消除查詢結果中的重復數據。諸如
從總統中選擇不同的州//美國總統來自哪些州?(重復的不計算在內)
9.2使用count()函數統計相關記錄的數量,並註意其用法:count(*)統計壹切,即使是NULLCount(數據列名)不計算空值。
select count(*)from president;
9.3如果我們想知道班上男生女生的數量?如何查詢?最簡單的方法是
select count(*)from student where sex = ' f ';
select count(*)from student where sex = ' m
但是如果使用count函數結合group by關鍵字,壹行命令就搞定了。
選擇性別,按性別從學生組中計數(*);
我們可以看到,count(*)和group by的組合與重復使用類似的查詢來統計壹個數據列的不同值的出現次數相比有很多優點,主要表現在以下幾個方面:
在開始統計之前,沒有必要知道計數數據列中有多少不同的值。
因為只使用了壹個查詢命令,所以我們可以對輸出進行排序。
選擇狀態,count(*)作為總統的計數
desc伯爵按州順序分組;//總統最多的前四個州是哪幾個?
9.4除了count(),我們還會用到其他統計函數,比如求最小值的min(),求最大值的max(),求平均值的sum(),求平均值的avg(),這些都是實際工作中經常用到的!
*10,從多個表中提取信息。
我們當前的例子都是從壹個表中提取信息,但是數據庫的真正強大之處在於使用“關系”來合成多個表中的記錄。這種操作稱為“關聯”或“組合”。我們可以看到select需要在多個表中給出信息(不可重復);From需要知道從哪些表開始工作;其中詳細描述了幾個表之間的關聯信息。
首先要學習最靠譜的數據列引用方法:數據表名和數據列名。這樣,在查詢中,妳就不會混淆這個數據列在哪個表中。
例1:查詢學生某壹天的考試成績,按學號列出。
select scroe.student_id,event_date,score.score.event.type
從事件,分數
where event . date = ' 2003-09-12 '
並且event.event_id=score.event_id
首先通過使用事件數據表將日期映射到壹個考試事件編號,然後通過使用該編號找到分數表中匹配的考試分數。關聯兩個表,壹個查詢就完成了。
例2:查詢學生某壹天的考試成績,並按姓名列出。
select student.name event.name,score.score,event.type
表單事件、分數、學生
where event . date = ' 2003-09-12 '
並且event.event_id= score.event_id
而scroe . student _ id = student . student _ id;
關聯三個表,壹個查詢就完成了。
例3:查看缺課學生的姓名、學號、缺課次數。
選擇學生。學生標識,學生姓名
將(absence.date)計為缺勤
來自學生,缺勤
學生在哪裏?student _ id =缺勤。student _ id//關聯條件
group by student.student _ id
簡單的關聯操作到此為止。其實我們需要學習很多相關的知識,比如我們懷疑某個數據表中沒有與我們相關的數據,那麽在進行相關查詢時,如何處理這個表呢?這就涉及到很多新的概念,內連接,外連接,左連接,右連接。不知道妳還有沒有信心把我的筆記讀下來?在本書的第四章中,非常詳細地討論了這種關聯,似乎“在SQL中,是select做了粗糙的工作”這句話再正確不過了。
我們知道select命令的許多用法,並感受到了它的靈活性。許多單詞可以組合起來形成壹個非常“微妙”的SQL語句。在基礎沒打好之前,我們這種初學者沒必要去鉆研那些技巧性很強的東西。“壹定程度的創意是必要的,但過於專業或充滿技巧的代碼是各種bug的發源地,也是幾個不眠之夜的前奏。”
註意:對於不在分組依據中的字段,聚合函數(sum、max、min、count...)必須添加到選擇字段列表中,否則該SQL語句是錯誤的。