日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

关系数据库SQL之基本数据查询:子查询、分组查询、模糊查询

發布時間:2024/4/17 数据库 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关系数据库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、WHERE3個關鍵字即可實現。

SELECT * FROM Students; SELECT * FROM Students WHERE Class='一班'; SELECT * FROM Students WHERE Class='一班' AND Age = 20;

別名/更名


語法

SELECT 字段名1 [AS] 別名 [,字段名1 AS 別名]… FROM <表名>

AS可以省略
當別名中含有非字母和下劃線時或者是關鍵字時,需要加上單/雙引號

示例

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(計數)。
具體的數據庫還會預定義一些其他常用的函數,比如字符串相聚合函數、時間聚合函數……。

SELECT AVG(Age),MAX(Age),MIN(Age),SUM(Age),COUNT(Id) FROM Students;

分組查詢


使用GROUP BY子句可進行分組查詢
注意:分組查詢的時候要在GROUP BY子句后面跟上所有查詢字段的列表

--根據班級分組查詢各班平均年齡、最大 年齡、最小年齡、年齡總和、班級人數 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]';

  • 不在范圍內查詢
-- 查詢所有手機號碼結尾兩位不包含1、3、5、7的信息 SELECT * FROM Students WHERE Phone LIKE '188177166[^1357][^1357]';

關于SQL查詢就到這里告一段落,后面會更新相關內容。
如果你覺得有問題,歡迎和你一起探討。

轉載于:https://www.cnblogs.com/seayxu/p/sql-query-base.html

總結

以上是生活随笔為你收集整理的关系数据库SQL之基本数据查询:子查询、分组查询、模糊查询的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。