SQL学习
什么是SQL
- SQL 指结构化查询语言
- SQL 使我们有能力访问数据库
- SQL 是一种 ANSI 的标准计算机语言(ANSI,美国国家标准化组织)
SQL能做什么
- 基本:增删改查
SQL分类
可以把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL)。SQL (结构化查询语言)是用于执行查询的语法。但是 SQL 语言也包含用于更新、插入和删除记录的语法。
-
查询和更新指令构成了 SQL 的 DML 部分:
- SELECT - 从数据库表中获取数据
- UPDATE - 更新数据库表中的数据
- DELETE - 从数据库表中删除数据
- INSERT INTO - 向数据库表中插入数据
-
SQL 的数据定义语言 (DDL) 部分使我们有能力创建或删除表格。我们也可以定义索引(键),规定表之间的链接,以及施加表间的约束。SQL 中最重要的 DDL 语句:
- CREATE DATABASE - 创建新数据库
- ALTER DATABASE - 修改数据库
- CREATE TABLE - 创建新表
- ALTER TABLE - 变更(改变)数据库表
- DROP TABLE - 删除表
- CREATE INDEX - 创建索引(搜索键)
- DROP INDEX - 删除索引
SQL SELECT
- 选择某一列: SELECT 列名称 FROM 表名称
- 选择所有列: SELECT * FROM 表名称
SQL SELECT DISTINCT
- 返回所选列中不同的值:SELECT DISTINCT 列名称 FROM 表名称
SQL WHERE
- 从指定列返回满足条件的值:SELECT 列名称 FROM 表名称 WHERE 列 运算符 值
- 例:SELECT * FROM Persons WHERE City=‘Beijing’,注意值如果是文本需要加单引号。
SQL AND & OR
- AND 和 OR 可在 WHERE 子语句中把两个或多个条件结合起来
- 例:SELECT * FROM Persons WHERE FirstName=‘Thomas’ AND LastName=‘Carter’
SQL ORDER BY
- ORDER BY 语句用于根据指定的列对结果集进行排序:SELECT 列名 FROM 表名 ORDER BY 要排序的列名
- ORDER BY 语句默认按照升序对记录进行排序。如果按照降序对记录进行排序,可以使用 DESC 关键字。
- 例:SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC
SQL INSERT INTO
- INSERT INTO 语句用于向表格中插入新的行:INSERT INTO 表名称 VALUES (值1, 值2,…)
- 也可以指定插入数据的列:INSERT INTO table_name (列1, 列2,…) VALUES (值1, 值2,…)
- 例: INSERT INTO Persons (LastName, Address) VALUES (‘Wilson’, ‘Champs-Elysees’)
SQL UPDATE
- Update 语句用于修改表中的数据:UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
- 例:UPDATE Person SET FirstName = ‘Fred’ WHERE LastName = ‘Wilson’
SQL DELETE
- DELETE 语句用于删除表中的行:DELETE FROM 表名称 WHERE 列名称 = 值
- 例:DELETE FROM Person WHERE LastName = ‘Wilson’
- 删除所有行:DELETE * FROM table_name或DELETE FROM table_name
SQL TOP
- TOP 子句用于规定要返回的记录的数目。对于拥有数千条记录的大型表来说,TOP 子句是非常有用的。并非所有的数据库系统都支持 TOP 子句。
- SELECT TOP number|percent column_name(s) FROM table_name
- 例: 取Persons表中前两行的所有列:SELECT TOP 2 * FROM Persons
- 例: 取Persons表中前50%行的所有列:SELECT TOP 50 PERCENT * FROM Persons
SQL LIKE
- LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式:SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern
- 从"Persons" 表中选取居住在以 “N” 开始的城市里的人:SELECT * FROM Persons
WHERE City LIKE ‘N%’(% 用于定义通配符)
SQL 通配符
- 例:从Persons表中提取City内不以A、L、N开头的那一行:SELECT * FROM Persons WHERE City LIKE ‘[!ALN]%’
SQL IN
- IN操作符允许在 WHERE 子句中规定多个值:SELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,…)
- 例:从表中选取姓氏为 Adams 和 Carter 的人:SELECT * FROM Persons WHERE LastName IN (‘Adams’,‘Carter’)
SQL BETWEEN
- BETWEEN 操作符在 WHERE 子句中使用,作用是选取介于两个值之间的数据范围:SELECT column_name(s) FROM table_name WHERE column_name BETWEEN value1 AND value2
- 例:以字母顺序显示介于 “Adams”(包括)和 “Carter”(不包括)之间的人:SELECT * FROM Persons WHERE LastName BETWEEN ‘Adams’ AND ‘Carter’
SQL Alias
- 通过使用 SQL,可以为列名称和表名称指定别名(Alias)
- 表的 SQL Alias 语法:SELECT column_name(s) FROM table_name AS alias_name
- 列的 SQL Alias 语法: SELECT column_name AS alias_name FROM table_name
SQL JOIN
- SQL join 用于根据两个或多个表中的列之间的关系,从这些表中查询数据。
- Key:数据库中的表可通过键将彼此联系起来。主键(Primary Key)是一个列(可以看成是一个索引),在这个列中的每一行的值都是唯一的。在表中,每个主键的值都是唯一的。这样做的目的是在不重复每个表中的所有数据的情况下,把表间的数据交叉捆绑在一起。(一个表中的Values用另一个表中的Key)
- 例:SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons, Orders WHERE Persons.Id_P = Orders.Id_P
SQL INNER JOIN
- 从table_1和table_2中选择指定列组成结果集:SELECT column_name(s) FROM table_name1 INNER JOIN table_name2 ON table_name1.column_name=table_name2.column_name
- 例:SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons INNER JOIN Orders ON Persons.Id_P=Orders.Id_P ORDER BY Persons.LastName
SQL LEFT JOIN
- LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行:SELECT column_name(s) FROM table_name1 LEFT JOIN table_name2 ON table_name1.column_name=table_name2.column_name
SQL RIGHT JOIN
- RIGHT JOIN 关键字会右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行:SELECT column_name(s) FROM table_name1 RIGHT JOIN table_name2 ON table_name1.column_name=table_name2.column_name
SQL FULL JOIN
- 只要其中某个表存在匹配,FULL JOIN 关键字就会返回行:SELECT column_name(s) FROM table_name1 FULL JOIN table_name2 ON table_name1.column_name=table_name2.column_name
SQL UNION
- UNION 操作符用于合并两个或多个 SELECT 语句的结果集:==SELECT column_name(s) FROM table_name1 UNION SELECT column_name(s) FROM table_name2 ==
- 注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
- UNION ALL 会列出所有值(包括重复的值)
SQL 函数
- SQL拥有很多可以用于计数和计算的内建函数
- 语法:SELECT function(列) FROM 表
- SQL中基本的函数类型有:Aggregate函数和Scalar函数
-
SQL AVG():
- AVG函数返回数值列的平均值。NULL值不包括在计算中。
-
SQL COUNT():
- COUNT() 函数返回匹配指定条件的行数。
- SELECT COUNT(column_name) FROM table_name:COUNT(column_name) 函数返回指定列的值的数目(NULL 不计入)。
- SELECT COUNT(*) FROM table_name:COUNT(*) 函数返回表中的记录数。
- SELECT COUNT(DISTINCT column_name) FROM table_name:COUNT(DISTINCT column_name) 函数返回指定列的不同值的数目。
-
SQL FIRST():
- SELECT FIRST(column_name) FROM table_name:FIRST() 函数返回指定的字段中第一个记录的值。
-
SQL LAST():
- 同上
-
SQL MAX():
- SELECT MAX(column_name) FROM table_name:MAX 函数返回一列中的最大值。NULL 值不包括在计算中。
-
SQL MIN():
- 同上
-
SQL SUM():
- SELECT SUM(column_name) FROM table_name:SUM 函数返回数值列的总数(总额)。
-
SQL GROUP BY:
- GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组。
- SELECT column_name, aggregate_function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name