访问和处理数据库的标准的计算机语言 SQL 学习记录

该博客围绕SQL语句展开,介绍了从表中选择列、去重、筛选数据等操作,还阐述了WHERE子句运算符、排序、插入、修改、删除数据等语句的使用,同时提及约束、索引、日期函数、数据类型等内容,最后给出多个WITH AS和Case When的实战用法。

注意:该博客SQL语句中的表均为博主本地数据库中的表[Smart_project]


1、选择Manager.[User]表中的ID,Email,DisplayName列:

SELECT ID,Email,DisplayName FROM Manager.[User]

2、选择Manager.[User]表中的所有列:

SELECT * FROM Manager.[User]

3、选择Manager.[User]表中的password列并去重:

SELECT DISTINCT password FROM Manager.[User]

4、选择Manager.[User]表中的password = 123456的数据:

SELECT password FROM Manager.[User] WHERE Password = '123456'

SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)。如果是数值,请不要使用引号。

可在 WHERE 子句中使用的运算符:

=等于、<>不等于、>大于、<小于、>=大于等于、<=小于等于、BETWEEN在某个范围内、LIKE搜索某种模式

5、AND 和 OR 可在 WHERE 子语句中把两个或多个条件结合起来:

SELECT * FROM Manager.[User]
WHERE Password = '123456' AND LoginName = 'Iverson.Tian'
SELECT * FROM Manager.[User]
WHERE Password = '1234' OR LoginName = 'Iverson.Tian'

6、ORDER BY 语句用于对结果集进行排序:

正序:

SELECT * FROM Manager.[User]
ORDER BY PostID

倒序<DESC>:

SELECT ID,PostID,Phone FROM Manager.[User]
ORDER BY PostID DESC

7、INSERT INTO 语句用于向表格中插入新的行:SQL INSERT INTO 语句

8、Update 语句用于修改表中的数据:SQL UPDATE 语句

9、DELETE 语句用于删除表中的行:SQL DELETE 语句

10、TOP 子句用于规定要返回的记录的数目:SQL TOP 子句

前2条:

SELECT TOP 2 ID,DisplayName FROM Manager.[User]

前50%:

SELECT TOP 50 PERCENT ID,DisplayName FROM Manager.[User]

11、LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式:

Password以S开头

SELECT * FROM Manager.[User] WHERE Password LIKE 'S%'

Password以S结尾

SELECT * FROM Manager.[User] WHERE Password LIKE '%S'

Password中包含S:

SELECT * FROM Manager.[User] WHERE Password LIKE '%S%'

Password中不包含S:

SELECT * FROM Manager.[User] WHERE Password NOT LIKE '%S%'

12、SQL 通配符:SQL 通配符

注意:SQL 通配符必须与 LIKE 运算符一起使用!

在 SQL 中,可使用以下通配符:

%替代一个或多个字符、_仅替代一个字符、[charlist]字符列中的任何单一字符、[^charlist]或者[!charlist]不在字符列中的任何单一字符

13、IN 操作符允许我们在 WHERE 子句中规定多个值:

SELECT * FROM Manager.[User] WHERE DivisionID IN (11,13)

14、BETWEEN 操作符在 WHERE 子句中使用,作用是选取介于两个值之间的数据范围:

DivisionID11~13的数据:

SELECT * FROM Manager.[User] WHERE DivisionID BETWEEN 11 AND 13

DivisionID不在11~13的数据:

SELECT * FROM Manager.[User] WHERE DivisionID NOT BETWEEN 11 AND 13

15、通过使用 SQL,可以为列名称和表名称指定别名(Alias):不常用

16、SQL join 用于根据两个或多个表中的列之间的关系,从这些表中查询数据:

引用两个表:

SELECT Manager.[User].DivisionID,Manager.[User].DisplayName,Manager.Division.ID
FROM Manager.[User],Manager.Division
WHERE Manager.[User].DivisionID = Manager.Division.ID

使用JOIN(只展示符合连接条件的数据):<文SQL中INNER JOIN与JOIN是相同的>

SELECT Manager.[User].DivisionID,Manager.[User].DisplayName,Manager.Division.ID
FROM Manager.[User]
INNER JOIN Manager.Division
ON Manager.[User].DivisionID = Manager.Division.ID
ORDER BY Manager.[User].DivisionID

17、不同的SQL JOIN:

  • JOIN: 如果表中有至少一个匹配,则返回行
  • LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
  • RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
  • FULL JOIN: 只要其中一个表中存在匹配,就返回行

特别的:

LEFT JOIN以左表为主表展示符合条件的和主表的所以字段,RIGHT JOIN反之!

如:Table1 T1 JOINTable2 T2  ON 连接条件,其中T1就是左表就是主表

18、UNION 操作符用于合并两个或多个 SELECT 语句的结果集:SQL UNION 和 UNION ALL 操作符

特别的:

  • UNION 内部的 SELECT 语句必须拥有相同数量的列
  • 列也必须拥有相似的数据类型
  • 每条 SELECT 语句中的列的顺序必须相同

19、SELECT INTO 语句:SQL SELECT INTO 语句

  1. SELECT INTO 语句从一个表中选取数据,然后把数据插入另一个表中
  2. SELECT INTO 语句常用于创建表的备份复件或者用于对记录进行存档

20、CREATE DATABASE 用于创建数据库:SQL CREATE DATABASE 语句

CREATE DATABASE Smart_Project

21、CREATE TABLE 语句用于创建数据库中的表:SQL CREATE TABLE 语句

22、SQL 约束(约束用于限制加入表的数据的类型)

常用约束:

  • NOT NULL---约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新记录或者更新记录
  • UNIQUE---约束唯一标识数据库表中的每条记录
  • PRIMARY KEY---约束唯一标识数据库表中的每条记录<主键>
  1. 主键必须包含唯一的值
  2. 主键列不能包含 NULL 值
  3. 每个表都应该有一个主键,并且每个表只能有一个主键
  • FOREIGN KEY---一个表中的 FOREIGN KEY (外键)指向另一个表中的 PRIMARY KEY
  1. FOREIGN KEY 约束用于预防破坏表之间连接的动作。
  2. FOREIGN KEY 约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一
  • CHECK---CHECK 约束用于限制列中的值的范围
  1. 如果对单个列定义 CHECK 约束,那么该列只允许特定的值
  2. 如果对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限制
  • DEFAULT---DEFAULT 约束用于向列中插入默认值
  1. 如果没有规定其他的值,那么会将默认值添加到所有的新记录

请注意,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束

23、CREATE INDEX 语句用于在表中创建索引:SQL CREATE INDEX 语句

24、通过使用 DROP 语句,可以轻松地删除索引、表和数据库:SQL 撤销索引、表以及数据库

25、ALTER TABLE 语句用于在已有的表中添加、修改或删除列SQL ALTER TABLE 语句

26、Auto-increment 会在新记录插入表中时生成一个唯一的数字:SQL AUTO INCREMENT 字段

27、SQL Date 函数:SQL Date 函数

28、SQL NULL 值:

注意:无法使用比较运算符来测试 NULL 值,比如 =,<,或者 <>,我们必须使用 IS NULL 和 IS NOT NULL 操作符

SELECT * FROM Manager.[User] WHERE Manager.[User].DisplayName is NULL
SELECT * FROM Manager.[User] WHERE Manager.[User].DisplayName is NOT NULL

29、SQL ISNULL()、NVL()、IFNULL() 和 COALESCE() 函数:SQL NULL 函数

30、SQL 数据类型SQL 数据类型

31、SQL 函数SQL 函数

  • AVG 函数返回数值列的平均值,NULL 值不包括在计算中
SELECT AVG(DivisionID) AS Average FROM Manager.[User]
  • COUNT() 函数返回匹配指定条件的行数

查询表中数据数:

SELECT COUNT(*) AS QTY FROM Manager.[User]

返回指定列的不同值的数目:

SELECT COUNT(DISTINCT DivisionID) AS NotSameValue FROM Manager.[User]
  • FIRST() 函数返回指定的字段中第一个记录的值<SQL Server不支持>
SELECT FIRST(DivisionID) AS NotSameValue FROM Manager.[User]
  • LAST() 函数返回指定的字段中最后一个记录的值<SQL Server不支持>
SELECT LAST(DivisionID) AS NotSameValue FROM Manager.[User]
  • MAX 函数返回一列中的最大值,NULL 值不包括在计算中
SELECT MAX(DivisionID) AS MAXValue FROM Manager.[User]
  • MIN 函数返回一列中的最小值,NULL 值不包括在计算中
SELECT MIN(DivisionID) AS MINValue FROM Manager.[User]
  • SUM 函数返回数值列的总数(总额)
SELECT SUM(DivisionID) AS Amount FROM Manager.[User]

合计函数 (比如 SUM) 常常需要添加 GROUP BY 语句

将相同Password的DivisionID相加并以DivisionAmount列显示:

SELECT Password,SUM(DivisionID) AS DivisionAmount 
FROM Manager.[User]
GROUP BY Password
  • 在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用
SELECT Password,SUM(DivisionID) AS DivisionAmount 
FROM Manager.[User]
GROUP BY Password
HAVING SUM(DivisionID) > 20
  • UCASE 函数把字段的值转换为大写<SQL Server不支持>
SELECT UCASE(DisplayName) AS Capital FROM Manager.[User]
  • LCASE 函数把字段的值转换为小写<SQL Server不支持>
SELECT LCASE(DisplayName) AS Lowercase FROM Manager.[User]
  • MID 函数用于从文本字段中提取字符<SQL Server不支持>
SELECT MID(DisplayName,1,3) AS InDisplayName FROM Manager.[User]
  • LEN 函数返回文本字段中值的长度
SELECT LEN(DisplayName) AS Length FROM Manager.[User]
  • ROUND 函数用于把数值字段舍入为指定的小数位数
SELECT DisplayName,ROUND(DivisionID,-2) AS NewValue FROM Manager.[User]
  • NOW 函数返回当前的日期和时间:SQL NOW() 函数
  • FORMAT 函数用于对字段的显示进行格式化

32、ROW_NUMBER()函数将针对SELECT语句返回的每一行,从1开始编号,赋予其连续的编号:

SELECT
	CGUnit.Name AS CGUnitName,
	CGItem.Name AS CGItemName,
	Currency.Name AS CurrencyName,
	ROW_NUMBER() over(order by CGList.ID) as RowID

FROM
	Bill.QuotationItem CGList
  LEFT JOIN Bill.CGItem CGItem
	ON CGList.CGItemID = CGItem.ID
  LEFT JOIN Manager.Currency Currency
	ON CGList.CurrencyID = Currency.ID
  LEFT JOIN Bill.CGUnit CGUnit
	ON CGList.CGUnitID = CGUnit.ID
	LEFT JOIN Bill.CGSubject CGSubject
  ON CGItem.CGSubjectID = CGSubject.ID

WHERE
	QuotationID = 71
  AND
	CGTypeID = 1

33、字符串拼接:

SELECT
	CONCAT(CGList.Amount,'/',CGUnit.Name) AS AmountUnit,
FROM
	Bill.QuotationItem CGList
  LEFT JOIN Bill.CGItem CGItem
	ON CGList.CGItemID = CGItem.ID
WHERE
	QuotationID = 71
  AND
	CGTypeID = 2


实战用法:

1、如何使用多个WITH AS?

With XXX as(),YYY as(),ZZZ as()

2、Case When的两种用法?[SQL case when的两种用法] - 邵彷 - 博客园

 第一种 格式  简单Case函数 :

case 列名
when   条件值1   then  选择项1
when   条件值2   then  选择项2......
else   默认值     end

第二种  格式 Case搜索函数:

case  
when  列名=条件值1   then  选择项1
when  列名=条件值2   then  选择项2.......
else  默认值 end

END

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值