MySQL中select語句引見及應用示例。本站提示廣大學習愛好者:(MySQL中select語句引見及應用示例)文章只能為提供參考,不一定能成為您想要的結果。以下是MySQL中select語句引見及應用示例正文
數據表都曾經創立起來了,假定我們曾經拔出了很多的數據,我們便可以用本身愛好的方法對數據內外面的信息停止檢索和顯示了,好比說:可以象上面如許把全部數據表內的內容都顯示出來
select * from president;
也能夠只拔取某一個數據行裡的某一個數據列
select birth from president where last_name='Eisenhower';
select語句的通用情勢以下:
select 你要的信息
from 數據表(一個或多個)
where 知足的前提
select語句有幾個子句,他們的各類搭配能幫你查出最感興致的信息,這些子句可以很簡略,也能夠很龐雜,看看做者是若何具體講授的
1、用各類操作符來設定檢索前提
要想讓select語句只把知足特定前提的記載檢索出來,就必需給它加上where字句來設置數據行的檢索前提。只要如許,能力有選擇地把數據列的取值知足特定請求的那些數據行遴選出來。可以針對任何類型的值停止查找,好比說,對數值停止搜刮
select * from score where score>95; //顯示一切分數在95分以上的信息
也能夠針對字符串值停止查找
select last_name,first_name from president where last_name='Tom'; //找出一切姓tom的總統
還可以對分歧類型的值停止組合查找
select last_name,first_name,birth,state from president
where birth<'1950-1-1' and (state='VA' or state='BA');
//找出1950年前出身於VA州或BA州的總統
可見 where子句中可使用的是算術操作符(+-*/%),比擬操作符(<>=)和邏輯運算符,我們應當闇練懂得這些操作符的寄義(都很簡略)
2、NULL 值的特殊處置
這是一種不屬於任何類型的值。它平日用來表現“沒稀有據”“數據未知”“數據缺掉”“數據超越取值規模”“與本數據列有關”“與本數據列的其它值分歧”等多種寄義。在很多情形下,NULL 值長短常有效的。
我們的各類操作符是不克不及對NULL 值停止處置的,假如絕對NULL 值停止查找,用的是 is null 或 is not null 來停止斷定,舉例以下:
select last_name,first_name,birth,state from president
where death is null; //找出一切沒逝世的總統
在某些情形下,NULL 值是很有效的類型,年夜家漸漸就會懂得的。
3、查詢成果停止排序
普通說來,假如創立了一個數據表並向外面拔出了一些記載,當收回一條select * from name敕令的時刻,數據記載在查詢成果中的前後次序平日與它們被拔出時的前後次序一樣.這固然相符我們的思想習氣.但這只是一種"想固然"的假定罷了,現實上,但記載被刪除時,數據庫中會發生一些空的區域,MYSQL會用新的記載來彌補這些區域,也就是說,這個時刻本假定就不准確了.是以我們必需記住一點,從辦事器前往的記載行的前後次序是沒有任何包管的!假如想要依照必定的次序,就必需應用order by 子句來設置這個次序.
select last_name,first_name,birth,state from president
order by last_name; //讓總統們的名字按字母次序分列
還可以設置分列的升序降序
select last_name,first_name from president
order by state DESC,last_name ASC;
//先依照出身地的降序分列,同出身地的依照姓氏的升序分列
留意:假如成果中含有NULL 值,默許情形下他們老是湧現在查詢成果的開首。
4、限制查詢成果中數據行個數
這個簡略,只需用limit 子句便可以了,看兩個例子:
select last_name,first_name,birth,state from president
order by birth limit 5; //只想看前5個
order by birth limit 10,5; //前往從第11個記載開端的5個記載(跳過了10個)
小技能:從president表中隨機找出一個總統來玩:
select last_name,first_name,birth,state from president
order by rand() limit 1; //這是用了表達式求值的辦法,在哪裡都管用
5、對輸入列停止求值和定名
為了進步效力,MYSQL還可以把表達式的盤算成果看成輸入列的值。表達式可以很簡略,也能夠很龐雜。例如:上面這個查詢有兩個輸入列,前一個輸入列對應一個異常簡略的表達式(一個常數),爾後一個輸入列則對應著一個應用了多個算術運算符和兩個函數挪用的龐雜表達式。
Select 17,format(sqrt(3*3+4*4),0))
輸入:17 5
再看這個敕令:把兩個輸入列歸並成一個
select concat(first_namem,' ‘,last_name),concat(city,',',state) from president;
假如歸並以後輸入列的題目太長,則可以給其一個體名,如:
select concat(first_namem,' ‘,last_name) as name,
concat(city,',',state) as birth place
from president;如許就比擬雅觀了。
6、和日期有關的成績
起首記住:在MYSQL中,年份是放到最後面的!我們平日對日期停止以下操作:
按日期停止排序
查找某個日期或日期規模
提取日期中的年,元,日各個部門
盤算兩個日期的距離
用一個日祈求出別的一個日期
看例子:
select * from event where date='2002-10-01' //看看是日有何測驗信息?
select last_name,first_name,birth,state from president
where death>'1900-01-01' and death<'2000-01-01'; //看看上個世紀逝世了幾個?
三個函數year,month,dayofmonth可以分離分別出日期中的年代日來。
select last_name,first_name,birth from president
where month(birth)=3; //誰生在3月 ?
where month(birth)=7 and dayofmonth(birth) =6; //誰生在7月6日?(湯姆克魯斯?)
函數to_days可以把日期轉換為天數。
select last_name,first_name,birth to_days(death)-to_days(birth) as age from president
可以看看這幫家伙都活了若干天!你本身把它改成年吧。
日期值的減法運算還能幫我們盤算湧現在間隔某個特定日期還有多長的時光,這恰是我們用來找到須要在近期內交納會費的會員的方法:
select last_name,first_name,expiration from member
where (to_days(expiration)-to_days(curdate())<60; //有些人60天內須要花錢了!
7、形式婚配
有些情形下,隱約查詢是很需要的,我們應用like和not like加上一個帶通配符的字符串便可以了。共有兩個通配符”_”(單個字符)和”&”(多個字符)
select concat(first_namem,' ‘,last_name) as name,
where last_name like ‘W%'; //找到以W或w開首的人
where last_name like ‘%W%'; //找到名字外面W或w開首的人
8、設置和應用SQL變量
MYSQL 3.23.6以上的版本可使用查詢成果來設置變量,我們就可以夠方面的把一些成果保留起來以供他用。變量的定名規格是:@name, 賦值語法是 @name:=value ( pascal?) 應用起來也簡略:
select @birth:=birth from president
where last_name ='adsltiger'; //履行完成後我們就就會有一個@birth變量可用
用一下嘗嘗:
select concat(first_namem,' ‘,last_name) as name from president
where birth<@birth order by birth; //看看那些人比我年夜!
*9、生成統計信息
純真依附手工來生成統計信息是一項既艱難又耗時還輕易失足的任務,假如我們能闇練控制用數據庫來生成各類統計信息的技能,他就會成為很有威力的信息處置對象。作者在這裡用了很多篇幅講這個主題,為了便於年夜家懂得,我分化開來闡述:
9.1 找出一組數據中究竟有若干種分歧的值是一項比擬罕見的統計任務,而症結字distinct便可以把查詢成果中的反復數據消除失落。如
select distinct state from president //看看美國總統們都來自那些州?(反復的不計)
9.2用count()函數來統計相干記載的個數,留意其應用辦法:count(*)盤算一切的,NULL也要;count(數據列稱號) NULL值不盤算在內。
select count(*) from president;
9.3假如我們想曉得班級內的男女生數量?該若何查詢呢?最簡略的辦法是
select count(*) from student where sex='f';
select count(*) from student where sex='m
然則假如應用count函數聯合group by症結字,一行敕令就弄定了
select sex,count(*) f rom student group by sex;
我們可以看到,與重復應用彼此相似的查詢來分離統計某數據列分歧取值湧現次數的做法比擬,把count(*)和group by字句相聯合應用有很多長處,重要表示在:
在開端統計自前,不用曉得被統計的數據列外面有若干種分歧的取值
由於只用了一個查詢敕令,我們可以對輸入做排序的處置
select state,count(*) as count from president
group by state order by count desc limt4; //看看出身總統最多的前四個州是哪幾個?
9.4除count(),我們還用其他一些統計函數,如求出最小值的min(),求最年夜值的max(),乞降的sum(),求均勻值的avg(),在現實任務中,這些函數時常常用到的!
*10、從多個表提守信息
我們今朝的例子都是從一個內外面提守信息,但數據庫的真正威力還在於用“關系”來綜合多個數據內外面的記載,這類操作稱之為“聯系關系”或“聯合”我們可以看到,select須要給出多個數據內外面的信息(弗成反復);from須要曉得從哪幾個內外面干事;where則對幾個表之間的聯系關系信息作出具體的描寫。
起首我們要進修最靠得住的數據列援用方法:數據表名.數據列名。如許在查詢中就必定不會混雜這個數據列究竟在哪個內外。
例子1:查詢某一天內的先生們的測驗成就,用學號列出。
select scroe.student_id,event_date,score.score.event.type
from event,score
where event.date='2003-09-12'
and event.event_id=score.event_id
起首,應用event數據表把日期映照到一個測驗事宜編號,在應用這個編號把score表內相婚配的測驗分數找出來。聯系關系兩個表,一個查詢弄定。
例子2:查詢某一天內的先生們的測驗成就,用姓名列出。
select student.name event.name,score.score,event.type
form event,score,student
where event.date='2003-09-12'
and event.event_id= score.event_id
and scroe.student_id=student.student_id;
聯系關系三個表,一個查詢弄定。
例子3:查詢一下出席先生的名字,學號,出席次數
select student.student_id,student_name
count(absence.date) as absences
from student,absence
where student.student_id=absence.student_id //聯系關系前提
group by student.student_id;