SQL学习笔记

    技术2023-09-08  86

    SQL学习笔记


    学习地址

    一、SQL基本语法

    1. select distinct

    返回表中不重复的值。 eg:

    SELECT DISTINCT * FROM T_TABLE

    2. AND & OR

    AND: 前后的两个条件都满足。 OR:前后的两个条件只要有有一个满足就可以。

    结合AND和OR运算符:

    SELECT * FROM Persons WHERE (FirstName=‘Thomas’ OR FirstName=‘William’) AND LastName=‘Carter’

    3. ORDER BY

    order by 语句用于根据指定的列对结果集进行排序。 order by 语句默认按照升序对记录进行排序。 如果需要按照降序对记录进行排序,使用DESC关键字。

    eg:

    SELECT * FROM t_table ORDER BY age //根据年龄进行升序排序 SELECT * FROM t_table ORDER BY age DESC //根据年龄进行降序排序 SELECT * FROM t_table ORDER BY age DESC , name ASC //根据年龄降序排序,如果有相同的值则已name进行升序排序

    4. 增删改语句

    INSERT INTO t_table (name , age) VALUES (‘大老黑’ , ‘35’) //插入指定列的值

    UPDATE t_table SET name = ‘小老弟’ WHERE name = ‘老妹妹’ //更新修改指定值

    DELETE FROM t_table WHERE name = ‘吃蝙蝠的人’ //删除指定值的记录

    二、SQL高级教程

    1. 返回指定条数的数据

    mysql语句:

    SELECT * FROM t_table LIMIT 10 //返回十条数据

    Oracle语句:

    SELECT * FROM t_table WHERE ROWNUM<=10 //返回十条数据

    2. 进行模糊查询

    LIKE语句:

    SELECT * FROM t_table where name LIKE ‘徐%’ //查找以”徐“为开头的名字

    SELECT * FROM Persons WHERE City LIKE ‘[ALN]%’ //选取居住的城市以 “A” 或 “L” 或 “N” 开头的人

    通配符描述%替代一个或多个字符_仅替代一个字符[ ]选择括号中的字符[! ]排除括号中的字符

    3. BETWEEN 和 IN

    都是用于显示一个区间的数据 BETWEEN:

    SELECT * FROM t_table WHERE age BETWEEN 0 AND 18 //查询出年龄为0-18的所有数据 若要查询不在0-18的数据,可以在BETWEEN前面加上NOT

    SELECT * FROM t_table code BETWEEN ‘Adams’ AND ‘Carter’ //以字母顺序显示介于 “Adams”(包括)和 “Carter”(不包括)之间的人(不同的数据库不一样)

    IN:

    SELECT * FROM t_table WHERE name IN (‘大老黑’ , ‘小老弟’) //查询括号里的数据

    4. 多表查询

    内连接(INNER JOIN): INNER JOIN 和 JOIN是相同的。

    SELECT t_table.name , t_student.course FROM t_table INNER JOIN t_student ON t_table.id = t_student.table_id

    左外连接(LEFT JOIN): LEFT JOIN关键字会从左表那里返回所有的行,即使在右表中没有匹配的行。

    SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons LEFT JOIN Orders ON Persons.Id_P=Orders.Id_P ORDER BY Persons.LastName

    右外连接(RIGHT JOIN): RIGHT JOIN 关键字会右表那里返回所有的行,即使在左表中没有匹配的行。

    SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons RIGHT JOIN Orders ON Persons.Id_P=Orders.Id_P ORDER BY Persons.LastName

    全连接(FULL JOIN): 只要其中某个表存在匹配,FULL JOIN 关键字就会返回行。

    SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons FULL JOIN Orders ON Persons.Id_P=Orders.Id_P ORDER BY Persons.LastName

    UNION(UNION ALL): UNION 操作符用于合并两个或多个 SELECT 语句的结果集。请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。

    SELECT E_Name FROM Employees_China UNION (ALL) SELECT E_Name FROM Employees_USA

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

    SELECT * INTO new_table_name [IN externaldatabase] FROM old_tablename SELECT LastName,Firstname INTO Persons_backup FROM Persons WHERE City=‘Beijing’

    5. 约束

    NOT NULL: 不接受NULL值,如果不向字段添加值,就无法插入新记录或者更新记录。

    UNIQUE: UNIQUE 约束唯一标识数据库表中的每条记录。UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。PRIMARY KEY 拥有自动定义的 UNIQUE 约束。请注意,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。

    PRIMARY KEY: PRIMARY KEY 约束唯一标识数据库表中的每条记录。主键必须包含唯一的值。主键列不能包含 NULL 值。每个表都应该有一个主键,并且每个表只能有一个主键。

    FOREIGN KEY: 一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY。FOREIGN KEY 约束用于预防破坏表之间连接的动作。FOREIGN KEY 约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。

    CHECK: CHECK 约束用于限制列中的值的范围。如果对单个列定义 CHECK 约束,那么该列只允许特定的值。如果对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限制。

    DEFAULT: DEFAULT 约束用于向列中插入默认值。如果没有规定其他的值,那么会将默认值添加到所有的新记录。

    #### 6.索引

    CREATE INDEX: 用于在表中创建索引。在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据。

    注释: 更新一个包含索引的表需要比更新一个没有索引的表更多的时间,这是由于索引本身也需要更新。因此,理想的做法是仅仅在常常被搜索的列(以及表)上面创建索引。

    CREATE INDEX PersonIndex ON Person (LastName [DESC]) //创建索引(进行降序)

    7. DROP

    通过使用 DROP 语句,可以轻松地删除索引、表和数据库。

    8. ALTER

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

    9. VIEW(视图)

    在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表。视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。我们可以向视图添加 SQL 函数、WHERE 以及 JOIN 语句,我们也可以提交数据,就像这些来自于某个单一的表。

    注释: 数据库的设计和结构不会受到视图中的函数、where 或 join 语句的影响。

    10. IS NULL & IS NOT NULL

    SELECT LastName,FirstName,Address FROM Persons WHERE Address IS NULL

    SELECT LastName,FirstName,Address FROM Persons WHERE Address IS NOT NULL

    IFNULL()函数: 微软的 ISNULL() 函数用于规定如何处理 NULL 值。NVL(), IFNULL() 和 COALESCE() 函数也可以达到相同的结果。

    SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0)) FROM Products //如果值为null的话就赋为0

    11. 函数简要介绍

    FIRST()函数: 返回指定的字段中第一个记录的值。 LAST()函数: 返回指定的字段中最后一个记录的值。 MAX()函数: 返回指定字段的最大值,NULL 值不包括在计算中。 MIN()函数: 返回指定字段的最小值,NULL值不包括在计算中。 SUM()函数: 返回指定字段的总和。 GROUP BY()函数: 根据选择指定的字段进行分组。 HAVING: 在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用。 eg:SELECT Customer,SUM(OrderPrice) FROM Orders GROUP BY Customer HAVING SUM(OrderPrice)<2000 UCASE()函数: 把字段的值转换为大写。 LCASE()函数: 把字段的值转换为小写。 MID()函数: 用于从文本字段中提取指定字符。eg:SELECT MID(City,1,3) as SmallCity FROM Persons //City列中提取前3个字符 LEN()函数: 返回文本字段的长度。 ROUND()函数: 用于把数值字段舍入为指定的小数位数。eg:SELECT ProductName, ROUND(UnitPrice,0) as UnitPrice FROM Products //将小数点都舍弃 NOW()函数: 返回当前的日期和时间。 FORMAT()函数: 用于对字段的显示进行格式化。

    Processed: 0.009, SQL: 9