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

注意:该博客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 语句用于向表格中插入新的行:http://www.w3school.com.cn/sql/sql_insert.asp

8.Update 语句用于修改表中的数据:http://www.w3school.com.cn/sql/sql_update.asp

9.DELETE 语句用于删除表中的行:http://www.w3school.com.cn/sql/sql_delete.asp

10.TOP 子句用于规定要返回的记录的数目:http://www.w3school.com.cn/sql/sql_top.asp

前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 通配符:http://www.w3school.com.cn/sql/sql_wildcards.asp

注意: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 语句的结果集:http://www.w3school.com.cn/sql/sql_union.asp

特别的:

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

19.SELECT INTO 语句:http://www.w3school.com.cn/sql/sql_select_into.asp

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

20.CREATE DATABASE 用于创建数据库:http://www.w3school.com.cn/sql/sql_create_db.asp

CREATE DATABASE Smart_Project

21.CREATE TABLE 语句用于创建数据库中的表:http://www.w3school.com.cn/sql/sql_create_table.asp

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 语句用于在表中创建索引:http://www.w3school.com.cn/sql/sql_create_index.asp

24.通过使用 DROP 语句,可以轻松地删除索引、表和数据库:http://www.w3school.com.cn/sql/sql_drop.asp

25.ALTER TABLE 语句用于在已有的表中添加、修改或删除列:http://www.w3school.com.cn/sql/sql_alter.asp

26.Auto-increment 会在新记录插入表中时生成一个唯一的数字:http://www.w3school.com.cn/sql/sql_autoincrement.asp

27.SQL Date 函数:http://www.w3school.com.cn/sql/sql_dates.asp

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() 函数:http://www.w3school.com.cn/sql/sql_isnull.asp

30.SQL 数据类型:http://www.w3school.com.cn/sql/sql_datatypes.asp

31.SQL 函数:http://www.w3school.com.cn/sql/sql_functions.asp

  • 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() 函数返回指定的字段中第一个记录的值
SELECT FIRST(DivisionID) AS NotSameValue FROM Manager.[User]
  • LAST() 函数返回指定的字段中最后一个记录的值
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 函数把字段的值转换为大写
SELECT UCASE(DisplayName) AS Capital FROM Manager.[User]
  • LCASE 函数把字段的值转换为小写
SELECT LCASE(DisplayName) AS Lowercase FROM Manager.[User]
  • MID 函数用于从文本字段中提取字符
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 函数返回当前的日期和时间:http://www.w3school.com.cn/sql/sql_func_now.asp
  • 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

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==


实战用法:

1.如何使用多个WITH AS?

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

2.Case When的两种用法?https://www.cnblogs.com/shaopang/p/6903985.html

 第一种 格式 : 简单Case函数 :

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

第二种  格式 :Case搜索函数:

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

 

你可能感兴趣的:(SQL,SQL)