各位同學們好,我們今天繼續來說,sql資料庫。我們今天的文檔中主要介紹了SQL查詢語句、查詢語句示例等。這里我給大家做了一個總結,有需要的同學可以參考一下。
首先,我們來了解一下SQL資料庫組成基本:
查找Movies表裡的Title欄位:
查找ID小於5的電影的Title和Director的以下這些:
查看電影的總條數
以下查詢語句是常用於班級統計的:
查詢「001」課程比「002」課程成績高的所有學生的學號:
查詢平均成績大於60分的同學的學號和平均成績:
查詢所有同學的學號、姓名、選課數、總成績:
查詢姓「李」的老師的個數:
查詢沒學過「葉平」老師課的同學的學號、姓名:
查詢學過「001」並且也學過編號「002」課程的同學的學號、姓名:
查詢學過「葉平」老師所教的所有課的同學的學號、姓名:
查詢課程編號「002」的成績比課程編號「001」課程低的所有同學的學號、姓名:
查詢所有課程成績小於60分的同學的學號、姓名:
查詢沒有學全所有課的同學的學號、姓名:
好了,這就是關於sql資料庫查詢語句的基礎了。我都替你們整理好了,感興趣的同學收藏一來,需要用的時候直接拿起來用就可以了。我們今天就到這里,下期再見!
本篇文章使用以下硬體型號:聯想小新Air15;系統版本:win10;軟體版本:sqlserver2008。
2. SQL查詢語句大全(一)
Select --從資料庫表中檢索數據行和列
Insert --向資料庫表添加新數據行
Delete --從資料庫表中刪除數據行
Update --更新資料庫表中的數據
Create TABLE --創建一個資料庫表
Drop TABLE --從資料庫中刪除表
Alter TABLE --修改資料庫表結構
Create VIEW --創建一個視圖
Drop VIEW --從資料庫中刪除視圖
Create INDEX --為資料庫表創建一個索引
Drop INDEX --從資料庫中刪除索引
Create PROCEDURE --創建一個存儲過程
Drop PROCEDURE --從資料庫中刪除存儲過程
Create TRIGGER --創建一個觸發器
Drop TRIGGER --從資料庫中刪除觸發器
Create SCHEMA --向資料庫添加一個新模式
Drop SCHEMA --從資料庫中刪除一個模式
Create DOMAIN --創建一個數據值域
Alter DOMAIN --改變域定義
Drop DOMAIN --從資料庫中刪除一個域
GRANT --授予用戶訪問許可權
DENY --拒絕用戶訪問
REVOKE --解除用戶訪問許可權
COMMIT --結束當前事務
ROLLBACK --中止當前事務
SET TRANSACTION --定義當前事務數據訪問特徵
DECLARE --為查詢設定游標
EXPLAN --為查詢描述數據訪問計劃
OPEN --檢索查詢結果打開一個游標
FETCH --檢索一行查詢結果
CLOSE --關閉游標
PREPARE --為動態執行准備 SQL 語句
EXECUTE --動態地執行 SQL 語句
DESCRIBE --描述准備好的查詢
declare @id char(10)
--set @id = '10010001'
select @id = '10010001'
---必須以@@開頭
declare @x int @y int @z int
select @x = 1 @y = 2 @z=3
if @x > @y
print 'x > y' --列印字元串'x > y'
else if @y > @z
print 'y > z'
else print 'z > y'
use pangu
update employee
set e_wage =
case
when job_level = 』1』 then e_wage*1.08
when job_level = 』2』 then e_wage*1.07
when job_level = 』3』 then e_wage*1.06
else e_wage*1.05
end
declare @x int @y int @c int
select @x = 1 @y=1
while @x < 3
begin
print @x --列印變數 x 的值
while @y < 3
begin
select @c =100*@x+ @y
print @c --列印變數 c 的值
select @y = @y + 1
end
select @x = @x + 1
select @y = 1
end
--例 等待 1 小時 2 分零 3 秒後才執行 Select 語句
waitfor delay 』01:02:03』
select * from employee
--例 等到晚上 11 點零 8 分後才執行 Select 語句
waitfor time 』23:08:00』
select * from employee
select *(列名) from table_name(表名) where column_name operator value
ex:(宿主)
select * from stock_information where stockid = str(nid)
stockname = 'str_name'
stockname like '% find this %'
stockname like '[a-zA-Z]%' --------- ([]指定值的范圍)
stockname like '[^F-M]%' --------- (^排除指定范圍)
--------- 只能在使用 like 關鍵字的 where 子句中使用通配符)
or stockpath = 'stock_path'
or stocknumber < 1000
and stockindex = 24
not stocksex = 'man'
stocknumber between 20 and 100
stocknumber in(10,20,30)
order by stockid desc(asc) --------- 排序,desc-降序,asc-升序
order by 1,2 --------- by 列號 stockname = (select stockname from stock_information where stockid = 4)
--------- 子查詢
--------- 除非能確保內層 select 只返回一個行的值,
--------- 否則應在外層 where 子句中用一個 in 限定符
select distinct column_name form table_name --------- distinct 指定檢索獨有的列值,不重復
select stocknumber ,"stocknumber + 10" = stocknumber + 10 from table_name
select stockname , "stocknumber" = count(*) from table_name group by stockname
--------- group by 將表按行分組,指定列中有相同的值
having count(*) = 2 --------- having 選定指定的組
select *
from table1, table2
where table1.id *= table2.id -------- 左外部連接,table1 中有的而 table2 中沒有得以 null 表示
table1.id =* table2.id -------- 右外部連接
select stockname from table1
union [all] ----- union 合並查詢結果集,all-保留重復行
select stockname from table2
insert into table_name (Stock_name,Stock_number) value ("xxx","xxxx")
value (select Stockname , Stocknumber from Stock_table2)---value 為 select 語句
update table_name set Stockname = "xxx" [where Stockid = 3]
Stockname = default
Stockname = null
Stocknumber = Stockname + 4
delete from table_name where Stockid = 3
truncate table_name ----------- 刪除表中所有行,仍保持表的完整性
drop table table_name --------------- 完全刪除表
alter table database.owner.table_name add column_name char(2) null .....
sp_help table_name ---- 顯示表已有特徵
create table table_name (name char(20), age smallint, lname varchar(30))
insert into table_name select ......... ----- 實現刪除列的方法(創建新表)
alter table table_name drop constraint Stockname_default ---- 刪除 Stockname 的 default 約束
3. SQL的一些查詢語句
13、select 客戶名,客戶id,count(訂單id)
from 客戶,訂單
where 客戶.客戶id=訂單.客戶id
group by 客戶名,客戶id
having count(訂單id)>10
14、update 訂單數量
set 數量=數量+10
where 訂單id in(select 訂單id
from 訂單,客戶
where 訂單.客戶id=客戶。客戶id
and 公司名稱='東南實業')
15、select max(數量),min(數量)
from 訂單明細
16、select * into 客戶備份
from 客戶
where 地區='華北'
17、select *
from 訂單
where datediff(day,訂購日期,發貨日期)<=5
三、1、select avg(庫存量)
case when avg(庫存量)>30 then '不必進貨' else'需要進貨' end
from 產品
4. sql查詢語句大全
SELECT * FROM TWS2F14CCC260D71 WHERE 地類='1999資源清查有林地'
5. SQL的一些查詢語句
--1、列出訂單明細表中訂單ID列表,要求去掉所有重復值。
SELECT DISTINCT 訂單ID FROM 訂單明細
--2、列出產品的最高庫存量、最低庫存量和平均庫存量
SELECT MAX(庫存量) 最高庫存量,MIN(庫存量) 最低庫存量,AVG(庫存量) 平均庫存量 FROM 產品
--3、統計訂單數量。
SELECT COUNT(*) 訂單數量 FROM 訂單
--4、按貨主地區統計訂單數量。
SELECT 貨主地區,COUNT(*) 訂單數量 FROM 訂單 GROUP BY 貨主地區
--5、列出所有訂閱大米的客戶名稱。
SELECT 公司名稱 AS 客戶名稱 FROM 客戶 JOIN 訂單 ON 客戶.客戶ID=訂單.客戶ID
JOIN 訂單明細 ON 訂單明細.訂單ID=訂單.訂單ID
JOIN 產品 ON 產品.產品ID=訂單明細.訂單ID
WHERE 產品名稱='大米'
--6、列出庫中的所有訂單的客戶ID,產品ID和發貨日期。
SELECT 客戶ID,產品ID,發貨日期 FROM 訂單 JOIN 訂單明細 ON 訂單明細.訂單ID=訂單.訂單ID
--7、按發貨日期的順序,列出所有的所有訂單的客戶ID,產品ID。
SELECT 客戶ID,產品ID FROM 訂單 JOIN 訂單明細 ON 訂單明細.訂單ID=訂單.訂單ID
ORDER BY 發貨日期
--8、顯示供應商表中姓「徐」的聯系人的地址,城市,電話,公司名稱以及郵編。(用三種方法實現)
SELECT 地址,城市,電話,公司名稱,郵政編碼 FROM 客戶 WHERE 聯系人姓名 LIKE '徐%'
SELECT 地址,城市,電話,公司名稱,郵政編碼 FROM 客戶 WHERE LEFT(聯系人姓名,1)='徐'
SELECT 地址,城市,電話,公司名稱,郵政編碼 FROM 客戶 WHERE CHARINDEX('徐',聯系人姓名)>0
--9、 查找產品表中含有「米」的相關記錄。
SELECT * FROM 產品 WHERE 產品名稱 LIKE '%米%'
--10、在客戶表中查找電話號碼含有「010」的記錄。(至少用兩種方法實現)
SELECT * FROM 客戶 WHERE 電話 LIKE '%010%'
SELECT * FROM 客戶 WHERE CHARINDEX('010',電話)>0
--11、查找客戶「黃雅玲」所訂購的產品名稱,定購量,及該客戶的所在公司,職務,電話。
SELECT 產品名稱,數量,公司名稱,聯系人職務,電話 FROM 客戶 JOIN 訂單 ON 客戶.客戶ID=訂單.客戶ID
JOIN 訂單明細 ON 訂單明細.訂單ID=訂單.訂單ID
JOIN 產品 ON 產品.產品ID=訂單明細.訂單ID
WHERE 聯系人姓名='黃雅玲'
--12、統計客戶所訂購的訂單數,並顯示相應的客戶名,客戶ID,訂單數,並且根據訂單數進行升序排序。
SELECT 公司名稱 AS 客戶名,客戶ID,COUNT(*) 訂單數 FROM 客戶 JOIN 訂單 ON 客戶.客戶ID=訂單.客戶ID
ORDER BY 3
6. 列舉一些sql高級查詢語句
1.集合操作
學習oracle中集合操作的有關語句,掌握union,union all,minus,interest的使用,能夠描述結合運算,並且能夠將多個查詢組合到一個查詢中去,能夠控制行返回的順序。
包含集合運算的查詢稱為復合查詢。見表格1-1
表1-1
Operator Returns content
UNION 由每個查詢選擇的所有不重復的行 並集不包含重復值
UNION ALL 由每個查詢選擇的所有的行,包括所有重復的行 完全並集包含重復值
INTERSECT 由每個查詢選擇的所有不重復的相交行 交集
MINUS 在第一個查詢中,不在後面查詢中,並且結果行不重復 差集
所有的集合運算與等號的優先順序相同,如果SQL語句包含多個集合運算並且沒有圓括弧明確地指定另一個順序,Oracle伺服器將以從左到右的順序計算。你應該使用圓括弧來明確地指定帶另外的集合運算的INTERSECT (相交) 運算查詢中的賦值順序。
Union all 效率一般比union高。
1.1.union和union all
UNION(聯合)運算
UNION運算返回所有由任一查詢選擇的行。用UNION運算從多表返回所有行,但除去任何重復的行。
原則 :
?被選擇的列數和列的數據類型必須是與所有用在查詢中的SELECT語句一致。列的名字不必相同。
?聯合運算在所有被選擇的列上進行。
?在做重復檢查的時候不忽略空(NULL)值。
?IN運算有比UNION運算高的優先順序。
?在默認情況下,輸出以SELECT子句的第一列的升序排序。
全聯合(UNION ALL)運算
用全聯合運算從多個查詢中返回所有行。
原則
?和聯合不同,重復的行不被過濾,並且默認情況下輸出不排序。
?不能使用DISTINCT關鍵字。
使用:
Select statement union | union all Select statement;
1.2.intersect交集操作
相交運算
用相交運算返回多個查詢中所有的公共行。 無重復行。
原則
?在查詢中被 SELECT 語句選擇的列數和數據類型必須與在查詢中所使用的所有的 SELTCT 語句中的一樣,但列的名字不必一樣。
?相交的表的倒序排序不改變結果。
?相交不忽略空值。
使用:
Select statement intersect all Select statement;
1.3. minus差集操作
相減運算
用相減運算返回由第一個查詢返回的行,那些行不出現在第二個查詢中 (第一個SELECT語句減第二個SELECT語句)。
原則
?在查詢中被SELECT語句選擇的列數和數據類型必須與在查詢中所使用的所有的SELTCT語句中的一樣,但列的名字不必一樣。
?對於MINUS運算,在WHERE子句中所有的列都必須在SELECT子句中。
集合運算的原則
?在兩個SELECT列表中的表達式必須在數目上和數據類型上相匹配
?可以用圓括弧改變執行的順序
?ORDER BY子句:–只能出現在語句的最後–從第一個SELECT語句接收列名、別名,或者位置記號
註:?除了UNION ALL,重復行自動被清除
?在結果中的列名是第一個查詢中出現的列名
?除了UNION ALL,默認情況下按升序順序輸出
2.exists和not exists的使用
2.1. exists的使用
Exists用於只能用於子查詢,可以替代in,若匹配到結果,則退出內部查詢,並將條件標志為true,傳回全部結果資料,in不管匹配到匹配不到都全部匹配完畢,使用exists可以將子查詢結果定為常量,不影響查詢效果,而且效率高。如查詢所有銷售部門員工的姓名,對比如下:
IN is often better if the results of the subquery are very small
When you write a query using the IN clause, you're telling the rule-based optimizer that you want the inner query to drive the outer query.
When you write EXISTS in a where clause, you're telling the optimizer that you want the outer query to be run first, using each value to fetch a value from the inner query.
In many cases, EXISTS is better because it requires you to specify a join condition, which can invoke an INDEX scan. However, IN is often better if the results of the subquery are very small. You usually want to run the query that returns the smaller set of results first.
In和exists對比:
若子查詢結果集比較小,優先使用in,若外層查詢比子查詢小,優先使用exists。因為若用in,則oracle會優先查詢子查詢,然後匹配外層查詢,若使用exists,則oracle會優先查詢外層表,然後再與內層表匹配。最優化匹配原則,拿最小記錄匹配大記錄。
使用in
select last_name, title
from s_emp
where dept_id in
(select id
from s_dept
where name='Sales');
使用exists
select last_name,title
from s_emp e
where exists
(select 'x' --把查詢結果定為constant,提高效率
from s_dept s where s.id=e.dept_id and s.name='Sales');
2.2 not exists的使用
與exists 含義相反,也在子查詢中使用,用於替代not in。其他一樣。如查詢不在銷售部的員工姓名
select last_name,title
from s_emp e
where not exists
(select 'x' --把查詢結果定為constant,提高效率
from s_dept s where s.id=e.dept_id and s.name='Sales');
3.with子句
9i新增語法
1.使用with子句可以讓子查詢重用相同的with查詢塊,通過select調用,一般在with查詢用到多次情況下。
2.with子句的返回結果存到用戶的臨時表空間中,只做一次查詢,提高效率。
3.有多個查詢的時候,第1個用with,後面的不用with,並且用逗號隔開。
5.最後一個with子句與下面的查詢之間不能有逗號,只通過右括弧分割,查詢必須用括弧括起來
6.如果定義了with子句,而在查詢中不使用,那麼會報ora-32035錯誤:未引用在with子句中定義的查詢名。(至少一個with查詢的name未被引用,解決方法是移除未被引用的with查詢)
7.前面的with子句定義的查詢在後面的with子句中可以使用。
With子句目的是為了重用查詢。
語法:
With alias_name as (select1), --as和select中的括弧都不能省略
alias_name2 as (select2),--後面的沒有with,逗號分割
…
alias_namen as (select n) –與下面的查詢之間沒有逗號
Select ….
如查詢銷售部門員工的姓名:
--with clause
with a as
(select id from s_dept where name='Sales' order by id)
select last_name,title
from s_emp where dept_id in (select * from a);--使用select查詢別名
使用with子句,可以在復雜的查詢中預先定義好一個結果集,然後在查詢中反復使用,不使用會報錯。而且with子句獲得的是一個臨時表,如果在查詢中使用,必須採用select from with查詢名,比如
With cnt as(select count(*) from table)
Select cnt+1 from al;
是錯誤的。必須是
With cnt as(select count(*) shumu from user_tables)
Select shumu+1 from cnt;
--直接引用with子查詢中的列別名。
一個with查詢的實例:
查詢出部門的總薪水大於所有部門平均總薪水的部門。部門表s_dept,員工表s_emp。
分析:做這個查詢,首先必須計算出所有部門的總薪水,然後計算出總薪水的平均薪水,再篩選出部門的總薪水大於所有部門總薪水平均薪水的部門。那麼第1步with查詢查出所有部門的總薪水,第2步用with從第1步獲得的結果表中查詢出平均薪水,最後利用這兩次的with查詢比較總薪水大於平均薪水的結果,如下:
with
--step1:查詢出部門名和部門的總薪水
dept_costs as(
select a.name,sum(b.salary) dept_total
from
s_dept a,s_emp b
where a.id=b.dept_id
group by a.name
),
--step2:利用上一個with查詢的結果,計算部門的平均總薪水
avg_costs as(
select sum(dept_total)/count(*) dept_avg
from dept_costs
)
--step3:從兩個with查詢中比較並且輸出查詢結果
select name,dept_total
from dept_costs
where
dept_total>
(
select dept_avg
from
avg_costs
)
order by name;
從上面的查詢可以看出,前面的with查詢的結果可以被後面的with查詢重用,並且對with查詢的結果列支持別名的使用,在最終查詢中必須要引用所有with查詢,否則會報錯ora-32035錯誤。
再如有這樣一個需求:一個查詢,如果查詢的結果行不滿足是10的倍數,則補空行,直到是查詢出的行數是10的倍數。例如:select * from trademark這個查詢。
with cnt as (select 10-mod(count(*),10) shumu from trademark) –查詢比10的倍數差幾個空行
select id,name
from trademark
union all --空行加進去
select null,null --補空行
from al connect by rownum<=(select shumu from cnt); --10個中connect by可以使用子查詢
10g之前的寫法
with cnt as (select 10-mod(count(*),10) shumu from trademark) –查詢比10的倍數差幾個空行
select id,name
from trademark
union all --空行加進去
select null,null --補空行
from all_objects where rownum<=(select shumu from cnt);--使用all_objects行比較多
4.merge into合並資料
語法:(其中as可以省略)
MERGE INTO table_name AS table_alias
USING (table|view|sub_query) AS alias
ON (join condition)
WHEN MATCHED THEN
UPDATE SET
col1 = col_val1,
col2 = col2_val
WHEN NOT MATCHED THEN
INSERT (column_list)—多個列以逗號分割 //可以不指定列
VALUES (column_values);
作用:將源數據(來源於實際的表,視圖,子查詢)更新或插入到指定的表中(必須實際存在),依賴於on條件,好處是避免了多個insert和update操作。Merge是一個目標性明確的操作符,不允許在一個merge語句中對相同的行insert或update操作。這個語法僅需要一次全表掃描就完成了全部工作,執行效率要高於INSERT+UPDATE。例子如下:
drop table t;
CREATE TABLE T AS SELECT ROWNUM ID, A.* from DBA_OBJECTS A;
drop table t1;
CREATE TABLE T1 AS
SELECT ROWNUM ID, OWNER, TABLE_NAME, CAST('TABLE' AS VARCHAR2(100)) OBJECT_TYPE
from DBA_TABLES;
select * from dba_objects;
select * from dba_tables;
MERGE INTO T1 USING T
ON (T.OWNER = T1.OWNER AND T.OBJECT_NAME = T1.TABLE_NAME AND T.OBJECT_TYPE = T1.OBJECT_TYPE)
WHEN MATCHED THEN UPDATE SET T1.ID = T.ID
WHEN NOT MATCHED THEN INSERT VALUES (T.ID, T.OWNER, T.OBJECT_NAME, T.OBJECT_TYPE);--insert後面不寫表示插入全部列
MERGE INTO T1 USING T
ON (T.OWNER = T1.OWNER AND T.OBJECT_NAME = T1.TABLE_NAME)
WHEN MATCHED THEN UPDATE SET T1.ID = T.ID
WHEN NOT MATCHED THEN INSERT VALUES (T.ID, T.OWNER, T.OBJECT_NAME, T.OBJECT_TYPE);--常見錯誤,連接條件不能獲得穩定的行,可以使用下面的用子查詢
MERGE INTO T1
USING (SELECT OWNER, OBJECT_NAME, MAX(ID) ID from T GROUP BY OWNER, OBJECT_NAME) T
ON (T.OWNER = T1.OWNER AND T.OBJECT_NAME = T1.TABLE_NAME)
WHEN MATCHED THEN UPDATE SET T1.ID = T.ID
WHEN NOT MATCHED THEN INSERT VALUES (T.ID, T.OWNER, T.OBJECT_NAME);
SELECT ID, OWNER, OBJECT_NAME, OBJECT_TYPE from T
MINUS
SELECT * from T1;
drop table subs;
create table subs(msid number(9),
ms_type char(1),
areacode number(3)
);
drop table acct;
create table acct(msid number(9),
bill_month number(6),
areacode number(3),
fee number(8,2) default 0.00);
insert into subs values(905310001,0,531);
insert into subs values(905320001,1,532);
insert into subs values(905330001,2,533);
commit;
merge into acct a --操作的表
using subs b on (a.msid=b.msid)--使用原始數據來源的表,並且制定條件,條件必須有括弧
when matched then
update set a.areacode=b.areacode--當匹配的時候,執行update操作,和直接update的語法不一樣,不需要制定表名
when not matched then--當不匹配的時候,執行insert操作,也不需要制定表名,若指定欄位插入,則在insert後用括弧標明,不指定是全部插入
insert(msid,bill_month,areacode) values(b.msid,'200702',b.areacode);
另外,MERGE語句的UPDATE不能修改用於連接的列,否則會報錯
select * from acct;
select * from subs;
--10g新特性,單個操作
merge into acct a
using subs b on(a.msid=b.msid)
when not matched then--只有單個not matched的時候,只做插入,不做更新,只有單個matched的時候,只做更新操作
insert(a.msid,a.bill_month,a.areacode) values(b.msid,'200702',b.areacode);
update acct set areacode=800 where msid=905320001;
delete from acct where areacode=533 or areacode=531;
insert into acct values(905320001,'200702',800,0.00);
--刪除重復行
delete from subs b where b.rowid<(
select max(a.rowid) from subs a where a.msid=b.msid and a.ms_type=b.ms_type and a.areacode=b.areacode);
--10g新特性,merge操作之後,只有匹配的update操作才可以,用delete where子句刪除目標表中滿足條件的行。
merge into acct a
using subs b on (a.msid=b.msid)
when MATCHED then
update set a.areacode=b.areacode
delete where (b.ms_type!=0)
when NOT MATCHED then
insert(msid,bill_month,areacode)
values(b.msid,'200702',b.areacode)
where b.ms_type=0;
--10g新特性,滿足條件的插入和更新
merge into acct a
using subs b on (a.msid=b.msid)
when MATCHED then
update set a.areacode=b.areacode
where b.ms_type=0
when NOT MATCHED then
insert(msid,bill_month,areacode)
values(b.msid,'200702',b.areacode)
where b.ms_type=0;
select * from subs where ms_type=0;
7. 簡單介紹幾個常用的SQL查詢語句
我們使用資料庫的時候,最常用的就是SQL語句了,那麼在SQL語句中比較常用的有哪些呢?下面我給大家分享一下。
首先是select語句,它經常被用於數據查詢,通過select我們可以快速的檢索自己想要的數據,如下圖所示
然後是update語句,update是進行數據更新的語句,更新的時候一定要指定where條件,如下圖所示
接下來是insert語句,insert被用來進行數據插入,運用它的時候一定注意插入的欄位順序,如下圖所示
最後是delete語句,delete被用來刪除表中的數據,進行刪除操作的時候也要注意指定刪除條件,如下圖所示
8. sql查詢語句
SELECT語句的基本形式為
SELECT
[ALL|DISTINCT]<目標列表達式>[,<目標列表達式>···]
FROM
<表名或視圖名>[,<表名或視圖名>···]
[WHERE
<條件表達式>]
語句的功能是根據WHERE子句中的條件表達式,從基本表(或視圖)中找出滿足條件的元組,按SELECT子句中的目標列,選出元組中的目標列形成結果表。
SQL語句對資料庫的操作十分靈活方便,原因在於SELECT語句中的成分豐富多樣,有許多可選形式,尤其是目標列和目標表達式,下面用例子來詳細說明,例子涉及的是"學生-課程"資料庫,其關系模式集如下:
學生信息表Student(SNO,SNAME,SSEX,SBIRTHDAY
CLASS)
教師信息表Teacher(TNO,TNAME,TSEX,TBIRTHDAY,DEPART)
課程信息表Course(CNO,CNAME,TNO)
成績表Grade(SNO,CNO,DEGREE)
例題:查詢Student表所有學生信息。
SELECT
*
FROM
Student;/*選擇操作*/
例題:查詢Student表中所有學生的學號和姓名。
SELECT
SNO,SNAME
FROM
Student;/*投影操作*/
例題:查詢Grade表中成績在60到80之間的所有記錄。
SELECT
*
FROM
Grade
WHERE
degree
BETWEEN
60
AND
80;/*選擇操作*/
例題:查詢Grade表中成績為85、86、88的記錄。
SELECT
*
FROM
Grade
WHERE
degree
IN(85,86,88);/*選擇操作*/
例題:查詢所有學生的SNAME,CNAME和DEGREE。
SELECT
Student.SNAME,Course.CNAME,Grade.DEGREE
FROM
Student,Course,Grade
WHERE
Student.SNO
=
Grade.SNO,Grade.CNO
=
Course.CNO;/*連接操作*/
例題:查詢"張旭"教師任課的學生成績。
SELECT
CNO,SNO,DEGREE
FROM
Grade
WHERE
CNO=(SELECT
Course.CNO
FROM
Course,Teacher
WHERE
Course.TNO=Teacher.TNO
and
Teacher.TNAME="張旭")
此查詢操作為嵌套查詢。子查詢在上一級查詢處理之前求解,即嵌套查詢是從里向外處理的,這樣,外層查詢可以利用內層查詢的結果,在此例中首先執行子查詢:
SELECT
Course.CNO
FROM
Course,Teacher
WHERE
Course.TNO=Teacher.TNO
and
Teacher.TNAME="張旭"
獲得張旭老師講授課程的課程號(801003),然後執行外查詢:
SELECT
CNO,SNO,DEGREE
FROM
Grade
WHERE
CNO="801003"
獲得"張旭"教師任課的學生成績。
9. SQL的查詢語句怎麼寫
/*
SQL是3個表的查詢,會給出表以及3個表之間的約束關系
Student表
No編號
Name姓名
Birthday生日
bj班級
jg籍貫
adds地址
number電話
Course表
Kcbh課程編號
kcmc課程名稱
Source表
Cjguid(主鍵)
No編號
kcbh課程編號
cj成績
*/
--(1)查詢學生籍貫為『湖北』生日為1995-10-3的所有信息
select*
fromStudent
where1=1
andjg='湖北'--籍貫為『湖北』
andBirthday='1995-10-3'--生日為1995-10-3
--(2)查詢學生姓名為『王華』的各課程的平均分,最高分,最低分,總分。
select
avg(kcbh)as平均分,
max(kcbh)as最高分,
min(kcbh)as最低分,
sum(kcbh)as總分
fromSource
where1=1
andexists(select1
fromStudent.
where1=1
andStudent.No=Source.No
Name='王華'--姓名為『王華』
)
--(3)沒有太看題,大致是要求查詢4,5列以上的信息,其中3個表各包含一些信息
select
Student.Nameas學生,
Course.kcmcas課程,
Source.cjas成績
fromStudent,
Course,
Source,
where1=1
andStudent.No=Source.No
andCourse.Kcbh=Source.kcbh
10. 求助:sql查詢語句怎麼寫
將同住人名兩兩相對列示出來
顯示結果如下:
旅客姓名,旅客身份證號,房間號,入住時間,賓館名稱,同住姓名,同住身份證號,同住入住時間
查詢語句如下:
select a.旅客姓名,a.旅客身份證號,a.房間號,a.入住時間,a.賓館名稱,同住姓名=b.旅客姓名,同住身份證號=b.旅客身份證號,同住入住時間=b.入住時間
from tablename a left join tablename b on a.賓館名稱=b.賓館名稱 and a.房間號=b.房間號 where datediff(s,a.入住時間,b.入住時間)<=20