上一篇關係數據庫經常使用SQL語句語法大全主要是關係型數據庫大致結構,本文細說一下關係型數據庫查詢的SQL語法。sql
SELECT [ALL|DISTINCT] <目標列表達式>[,<目標列表達式>]… FROM <表名或視圖名>[,<表名或視圖名>]… [WHERE <條件表達式>] [GROUP BY <列名> [HAVING <條件表達式>]] [ORDER BY <列名> [ASC|DESC]…]
SQL查詢語句的順序:SELECT、FROM、WHERE、GROUP BY、HAVING、ORDER BY。SELECT、FROM是必須的,HAVING子句只能與GROUP BY搭配使用。數據庫
1.建立數據庫和數據表 2.插入基本數據 3.本文以SQL Server爲例介紹函數
-- 建立學生表 CREATE TABLE Students( Id int NOT NULL PRIMARY KEY, Name varchar(20) NOT NULL, Class varchar(15) NOT NULL, Gender varchar(10) NULL, Age int NULL, Phone varchar(15) NULL, [Address] varchar(100) NULL ) -- 建立課程表 CREATE TABLE Courses( Id int NOT NULL PRIMARY KEY IDENTITY(1,1), Name varchar(50) NOT NULL ); -- 建立成績表 CREATE TABLE Scores( Id int PRIMARY KEY IDENTITY(1,1), SId int NOT NULL, CId int NOT NULL, Grades decimal(5,2) NOT NULL, IsPassed bit NOT NULL ); -- 插入學生表基礎數據 INSERT INTO Students (Id,Name,Class,Gender,Age,Phone,[Address]) VALUES(2016001,'小明','一班','男',20,'18817716611','北京'); INSERT INTO Students (Id,Name,Class,Gender,Age,Phone,[Address]) VALUES(2016002,'小龍','一班','男',19,'18817716622','天津'); INSERT INTO Students (Id,Name,Class,Gender,Age,Phone,[Address]) VALUES(2016003,'小王','二班','男',20,'18817716633','北京'); INSERT INTO Students (Id,Name,Class,Gender,Age,Phone,[Address]) VALUES(2016004,'婷婷','一班','女',17,'18817716644','濟南'); INSERT INTO Students (Id,Name,Class,Gender,Age,Phone,[Address]) VALUES(2016005,'張三','一班','男',19,'18817716655','北京'); INSERT INTO Students (Id,Name,Class,Gender,Age,Phone,[Address]) VALUES(2016006,'小趙','一班','男',20,'18817716666','北京'); INSERT INTO Students (Id,Name,Class,Gender,Age,Phone,[Address]) VALUES(2016007,'麗麗','二班','女',18,'18817716677','北京'); INSERT INTO Students (Id,Name,Class,Gender,Age,Phone,[Address]) VALUES(2016008,'花花','一班','女',19,'18817716688','瀋陽'); INSERT INTO Students (Id,Name,Class,Gender,Age,Phone,[Address]) VALUES(2016009,'靜靜','二班','女',20,'18817716699','北京'); -- 插入課程表基礎數據 INSERT INTO Courses(Name) VALUES('語文'); INSERT INTO Courses(Name) VALUES('數學'); INSERT INTO Courses(Name) VALUES('英語'); -- 插入成績表基礎數據 INSERT INTO Scores(SId,CId,Grades,IsPassed) VALUES(2016001,1,120,1); INSERT INTO Scores(SId,CId,Grades,IsPassed) VALUES(2016001,2,70,0); INSERT INTO Scores(SId,CId,Grades,IsPassed) VALUES(2016001,3,89,1); INSERT INTO Scores(SId,CId,Grades,IsPassed) VALUES(2016002,1,90,1); INSERT INTO Scores(SId,CId,Grades,IsPassed) VALUES(2016002,2,88,1); INSERT INTO Scores(SId,CId,Grades,IsPassed) VALUES(2016002,3,96,1); INSERT INTO Scores(SId,CId,Grades,IsPassed) VALUES(2016003,1,112,1); INSERT INTO Scores(SId,CId,Grades,IsPassed) VALUES(2016003,3,102,1); INSERT INTO Scores(SId,CId,Grades,IsPassed) VALUES(2016004,1,80,1); INSERT INTO Scores(SId,CId,Grades,IsPassed) VALUES(2016004,2,86,1); INSERT INTO Scores(SId,CId,Grades,IsPassed) VALUES(2016004,3,47,0); INSERT INTO Scores(SId,CId,Grades,IsPassed) VALUES(2016005,1,87,1); INSERT INTO Scores(SId,CId,Grades,IsPassed) VALUES(2016005,2,96,1); INSERT INTO Scores(SId,CId,Grades,IsPassed) VALUES(2016005,3,68,0); INSERT INTO Scores(SId,CId,Grades,IsPassed) VALUES(2016006,2,95,1); INSERT INTO Scores(SId,CId,Grades,IsPassed) VALUES(2016006,3,100,1); INSERT INTO Scores(SId,CId,Grades,IsPassed) VALUES(2016007,1,87,1); INSERT INTO Scores(SId,CId,Grades,IsPassed) VALUES(2016007,2,57,0); INSERT INTO Scores(SId,CId,Grades,IsPassed) VALUES(2016007,3,130,1); INSERT INTO Scores(SId,CId,Grades,IsPassed) VALUES(2016008,1,89,1); INSERT INTO Scores(SId,CId,Grades,IsPassed) VALUES(2016008,3,66,0); INSERT INTO Scores(SId,CId,Grades,IsPassed) VALUES(2016009,1,97,1); INSERT INTO Scores(SId,CId,Grades,IsPassed) VALUES(2016009,2,104,1); INSERT INTO Scores(SId,CId,Grades,IsPassed) VALUES(2016009,3,68,1);
簡單查詢只須要
SELECT
、FROM
、WHERE
3個關鍵字便可實現。code
SELECT * FROM Students; SELECT * FROM Students WHERE Class='一班'; SELECT * FROM Students WHERE Class='一班' AND Age = 20;
語法ci
SELECT 字段名1 [AS] 別名 [,字段名1 AS 別名]… FROM <表名>
AS能夠省略 當別名中含有非字母和下劃線時或者是關鍵字時,須要加上單/雙引號字符串
示例get
SELECT Id AS '學號',Name '姓名',Class ClassName FROM Students;
子查詢也稱嵌套查詢,是指一個
SELECT
查詢語句能夠嵌入另外一個SELECT
查詢語句之中。SQL中容許多級嵌套,子查詢在實際使用中很是多。 鏈接查詢:涉及兩個及以上的表查詢爲鏈接查詢。數學
--查詢二班學生成績 SELECT * FROM Scores WHERE SId IN(SELECT Id FROM Students WHERE Class='二班')
聚合函數:是一個值的集合爲輸入,返回單個值的函數。 SQL預約義了5個彙集函數:AVG(平均值)、MIN(最小值)、MAX(最大值)、SUM(求和)、COUNT(計數)。 具體的數據庫還會預約義一些其餘經常使用的函數,好比字符串相聚合函數、時間聚合函數……。it
SELECT AVG(Age),MAX(Age),MIN(Age),SUM(Age),COUNT(Id) FROM Students;
使用
GROUP BY
子句可進行分組查詢 注意:分組查詢的時候要在GROUP BY
子句後面跟上全部查詢字段的列表class
--根據班級分組查詢各班平均年齡、最大 年齡、最小年齡、年齡總和、班級人數 SELECT Class,AVG(Age),MAX(Age),MIN(Age),SUM(Age),COUNT(Id) FROM Students GROUP BY Class;
HAVING子句
若是須要在分組前的數據進行限制,可使用HAVING子句 HAVING子句只能與GROUP BY搭配使用
--根據班級分組查詢各班平均年齡而且班級人數大於3人 SELECT Class,AVG(Age) FROM Students GROUP BY Class HAVING COUNT(Id)>3;
HAVING子句和WHERE的區別
WHERE語句在GROUP BY語句以前,SQL會在分組以前計算WHERE語句; HAVING語句在GROUP BY語句以後,SQL會在分組以後計算HAVING語句。
語法
SELECT 字段列表 FROM 表名 WHERE 字段 LIKE '<通配符>'
模糊查詢是使用關鍵字
LIKE
和通配符實現的 _:任何單個字符(一個'_'只匹配一個字符,多個字符就使用多個_) %:包含零個或更多字符的任意字符串(匹配任意內容) []:指定範圍的字符(只匹配[]內的字符) [ ^]:不在指定範圍的字符(只匹配除[]內的字符) SQL中通配符能夠混合使用
SELECT * FROM Students WHERE Name LIKE '小_'; SELECT * FROM Students WHERE Phone LIKE '188177166__';
SELECT * FROM Students WHERE Phone LIKE '188177166__'; SELECT * FROM Students WHERE Phone LIKE '%'; SELECT * FROM Students;
這三條SQL語句查詢結果都相同只針對此表,緣由是瞎貓碰上死耗子。(數據少,恰好查詢的結果是所有的內容)
-- 查詢全部手機號碼結尾兩位包含1和2的信息 SELECT * FROM Students WHERE Phone LIKE '188177166[12][12]';
-- 查詢全部手機號碼結尾兩位不包含一、三、五、7的信息 SELECT * FROM Students WHERE Phone LIKE '188177166[^1357][^1357]';
關於SQL查詢就到這裏告一段落,後面會更新相關內容。 若是你以爲有問題,歡迎和你一塊兒探討。