【019】SQL 基础学习
---------------------------------------------------------------------------------------------------------
●·● 目录:
A1 ………… SELECT 语句
A2 ………… SELECT_DISTINCT 语句
A3 ………… WHERE 语句
A4 ………… AND_& OR 运算符
A5 ………… ORDER_BY 子句
A6 ………… INSERT_INTO 语句
A7 ………… UPDATE 语句
A8 ………… DELETE 语句
A9 ………… TOP 子句
G1 ………… LIKE 操作符
G2 ………… 通配符
G3 ………… IN 操作符
G4 ………… BETWEEN 操作符
G5 ………… Alias(别名)
G6 ………… JOIN 关键字
G7 ………… INNER_JOIN 关键字
G8 ………… LEFT_JOIN 关键字
G9 ………… RIGHT_JOIN 关键字
U1 ………… FULL_JOIN 关键字
U2 ………… UNION 关键字
U3 ………… SELECT_INTO 语句
U4 ………… CREATE_DATABASE 语句
U5 ………… CREATE_TABLE 语句
U6 ………… CREATE_INDEX 语句
U7 ………… DROP 语句
U8 ………… ALTER_TABLE 语句
--------------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第A1个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● SELECT 语句:
1. SELECT 语句用于从表中选取数据。结果被存储在一个结果表中(称为结果集)。
2. SELECT 语法:
SELECT 列名称 FROM 表名称
以及
SELECT 列名称1, 列名称2 FROM 表名称
以及
SELECT * FROM 表名称
--------------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第A2个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● SELECT DISTINCT 语句:
1. 关键词 DISTINCT 用于返回唯一不同的值。
2. SELECT DISTINCT 语法:
SELECT DISTINCT 列名称 FROM 表名称
--------------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第A3个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● WHERE 语句:
1. 如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句。
2. WHERE 语法:
SELECT 列名称 FROM 表名称 WHERE 列 运算符 值
※ 运算符:=、<>、!=、>、<、>=、<=、BETWEEN、LIKE。
※ 我们在例子中的条件值周围使用的是单引号。
文本值:
这是正确的:SELECT * FROM Persons WHERE FirstName=‘Bush‘ 这是错误的:SELECT * FROM Persons WHERE FirstName=Bush
数值:
这是正确的:SELECT * FROM Persons WHERE Year>1965 这是错误的:SELECT * FROM Persons WHERE Year>‘1965‘
--------------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第A4个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● AND & OR 运算符:
1. AND 和 OR 运算符用于基于一个以上的条件对记录进行过滤。
2. AND 和 OR 可在 WHERE 子语句中把两个或多个条件结合起来。
3. 如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。
4. 如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录。
AND 运算符实例:
SELECT * FROM Persons WHERE FirstName=‘Thomas‘ AND LastName=‘Carter‘
OR 运算符实例:
SELECT * FROM Persons WHERE firstname=‘Thomas‘ OR lastname=‘Carter‘
结合 AND 和 OR 运算符:
SELECT * FROM Persons WHERE (FirstName=‘Thomas‘ OR FirstName=‘William‘)AND LastName=‘Carter‘
--------------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第A5个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● ORDER BY 子句:
1. ORDER BY 语句用于根据指定的列对结果集进行排序。默认按照升序排序。如果按照降序排序,可以使用 DESC 关键字。
2. ORDER BY 语法:
SELECT 列名称 FROM 表名称 ORDER BY 列名称
以及
SELECT * FROM 表名称 ORDER BY 列名称1, 列名称2 --先按照 列名称1 来排序,相同的按照 类名称2 来排序!
实例:
SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC, OrderNumber ASC
--------------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第A6个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● INSERT INTO 语句:
1. INSERT INTO 语句用于向表格中插入新的行。
2. INSERT INTO
INSERT INTO 表名称 VALUES (值1, 值2,....)
我们也可以指定所要插入数据的列:
INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)
实例1:
INSERT INTO Persons VALUES (‘Gates‘, ‘Bill‘, ‘Xuanwumen 10‘, ‘Beijing‘)
实例2:
INSERT INTO Persons (LastName, Address) VALUES (‘Wilson‘, ‘Champs-Elysees‘)
--------------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第A7个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● UPDATE 语句:
1. Update 语句用于修改表中的数据。
2. Update 语法:
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
更新某一行中的一个列:
UPDATE Person SET FirstName = ‘Fred‘ WHERE LastName = ‘Wilson‘
更新某一行中的若干列:
UPDATE Person SET Address = ‘Zhongshan 23‘, City = ‘Nanjing‘WHERE LastName = ‘Wilson‘
--------------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第A8个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● DELETE 语句:
1. DELETE 语句用于删除表中的行。
2. DELETE 语法:
DELETE FROM 表名称 WHERE 列名称 = 值
删除所有行:
可以在不删除表的情况下删除所有的行。这意味着表的结构、属性和索引都是完整的:
DELETE FROM table_name
或者:
DELETE * FROM table_name
--------------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第A9个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● TOP 子句:
1. TOP 子句用于规定要返回的记录的数目。
2. SQL Server 中的 TOP 语法:
SELECT TOP number|percent column_name(s)FROM table_name
实例:
SELECT TOP 2 * FROM Persons
SELECT TOP 50 PERCENT * FROM Persons
--------------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第G1个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● LIKE 操作符:
1. LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。
2. LIKE 语法:
SELECT column_name(s)FROM table_nameWHERE column_name LIKE pattern
实例一:
SELECT * FROM PersonsWHERE City LIKE ‘N%‘
※ "%" 可用于定义通配符(模式中缺少的字母)。
※ 通过使用 NOT 关键字,可以取反!
※ "_" 仅替代一个字符。
实例二:
SELECT * FROM PersonsWHERE City NOT LIKE ‘%l_on%‘
--------------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第G2个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● 通配符:
1. 在搜索数据库中的数据时,SQL 通配符可以替代一个或多个字符。SQL 通配符必须与 LIKE 运算符一起使用。
通配符 | 描述 |
---|---|
% | 替代一个或多个字符 |
_ | 仅替代一个字符 |
[charlist] | 字符列中的任何单一字符 |
[^charlist] 或者 [!charlist] |
不在字符列中的任何单一字符 |
例子一:从上面的 "Persons" 表中选取居住的城市以 "A" 或 "L" 或 "N" 开头的人:
SELECT * FROM PersonsWHERE City LIKE ‘[ALN]%‘
例子二:从上面的 "Persons" 表中选取居住的城市不以 "A" 或 "L" 或 "N" 开头的人:
SELECT * FROM PersonsWHERE City LIKE ‘[!ALN]%‘
--------------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第G3个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● IN 操作符:
1. IN 操作符允许我们在 WHERE 子句中规定多个值。
2. IN 语法:
SELECT column_name(s)FROM table_nameWHERE column_name IN (value1,value2,...)
实例:
SELECT * FROM PersonsWHERE LastName IN (‘Adams‘,‘Carter‘)
--------------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第G4个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● BETWEEN 操作符:
1. 操作符 BETWEEN ... AND 会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。
2. BETWEEN 语法:
SELECT column_name(s)FROM table_nameWHERE column_nameBETWEEN value1 AND value2
实例一:SQL Server 返回边界及其中间的部分!
SELECT * FROM PersonsWHERE LastNameBETWEEN ‘Adams‘ AND ‘Carter‘
实例二:
SELECT * FROM PersonsWHERE LastNameNOT BETWEEN ‘Adams‘ AND ‘Carter‘
--------------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第G5个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● Alias(别名):
1. 通过使用 SQL,可以为列名称和表名称指定别名(Alias)。
2. Alias 语法:
SELECT column_name(s)FROM table_nameAS alias_name
列的语法:
SELECT column_name AS alias_nameFROM table_name
实例一:使用别名
SELECT po.OrderID, p.LastName, p.FirstNameFROM Persons AS p, Product_Orders AS poWHERE p.LastName=‘Adams‘ AND p.FirstName=‘John‘
不使用别名
SELECT Product_Orders.OrderID, Persons.LastName, Persons.FirstNameFROM Persons, Product_OrdersWHERE Persons.LastName=‘Adams‘ AND Persons.FirstName=‘John‘
实例二:
SELECT LastName AS Family, FirstName AS NameFROM Persons
--------------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第G6个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● JOIN 关键字:
1. join 用于根据两个或多个表中的列之间的关系,从这些表中查询数据。
数据库中的表可通过键将彼此联系起来。主键(Primary Key)是一个列,在这个列中的每一行的值都是唯一的。在表中,每个主键的值都是唯一的。这样做的目的是在不重复每个表中的所有数据的情况下,把表间的数据交叉捆绑在一起。
实例一:
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNoFROM Persons, OrdersWHERE Persons.Id_P = Orders.Id_P
实例二:
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNoFROM PersonsINNER JOIN OrdersON Persons.Id_P = Orders.Id_PORDER BY Persons.LastName
--------------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第G7个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● INNER JOIN 关键字:
1. 在表中存在至少一个匹配时,INNER JOIN 关键字返回行。
2. INNER JOIN 语法:
SELECT column_name(s)FROM table_name1INNER JOIN table_name2 ON table_name1.column_name=table_name2.column_name
实例:
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNoFROM PersonsINNER JOIN OrdersON Persons.Id_P=Orders.Id_PORDER BY Persons.LastName
--------------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第G8个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● LEFT JOIN 关键字:
1. LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。
2. LEFT JOIN 语法:
SELECT column_name(s)FROM table_name1LEFT JOIN table_name2 ON table_name1.column_name=table_name2.column_name
实例:
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNoFROM PersonsLEFT JOIN OrdersON Persons.Id_P=Orders.Id_PORDER BY Persons.LastName
--------------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第G9个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● RIGHT JOIN 关键字:
1. RIGHT JOIN 关键字会右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行。
2. RIGHT JOIN 语法:
SELECT column_name(s)FROM table_name1RIGHT JOIN table_name2 ON table_name1.column_name=table_name2.column_name
实例:
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNoFROM PersonsRIGHT JOIN OrdersON Persons.Id_P=Orders.Id_PORDER BY Persons.LastName
--------------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第U1个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● FULL JOIN 关键字:
1. 只要其中某个表存在匹配,FULL JOIN 关键字就会返回行。
2. FULL JOIN 语法:
SELECT column_name(s)FROM table_name1FULL JOIN table_name2 ON table_name1.column_name=table_name2.column_name
实例:
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNoFROM PersonsFULL JOIN OrdersON Persons.Id_P=Orders.Id_PORDER BY Persons.LastName
--------------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第U2个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● UNION 和 UNION ALL 关键字:
1. UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
2. UNION 语法:
SELECT column_name(s) FROM table_name1UNIONSELECT column_name(s) FROM table_name2
UNION ALL 语法:
SELECT column_name(s) FROM table_name1UNION ALLSELECT column_name(s) FROM table_name2
实例一:合并相同的部分
SELECT E_Name FROM Employees_ChinaUNIONSELECT E_Name FROM Employees_USA
实例二:显示全部
SELECT E_Name FROM Employees_ChinaUNION ALLSELECT E_Name FROM Employees_USA
--------------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第U3个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● SELECT INTO 语句:
1. SELECT INTO 语句从一个表中选取数据,然后把数据插入另一个表中。SELECT INTO 语句常用于创建表的备份复件或者用于对记录进行存档。
2. SELECT INTO 语法:把所有的列插入新表:
SELECT *INTO new_table_name [IN externaldatabase] FROM old_tablename
只把希望的列插入新表:
SELECT column_name(s)INTO new_table_name [IN externaldatabase] FROM old_tablename
实例一:
SELECT *INTO Persons_backupFROM Persons
实例二:
SELECT LastName,FirstnameINTO Persons_backupFROM PersonsWHERE City=‘Beijing‘
--------------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第U4个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● CREATE DATABASE 语句:
1. CREATE DATABASE 用于创建数据库。
2. CREATE DATABASE 语法:
CREATE DATABASE database_name
实例:
CREATE DATABASE my_db
--------------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第U5个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● CREATE TABLE 语句:
1. CREATE TABLE 语句用于创建数据库中的表。
2. CREATE TABLE 语法:
CREATE TABLE 表名称(列名称1 数据类型,列名称2 数据类型,列名称3 数据类型,....)
实例一:字符类型:
CREATE TABLE Persons(Id_P int,LastName varchar(255),FirstName varchar(255),Address varchar(255),City varchar(255))
实例二:NOT NULL:
CREATE TABLE Persons(Id_P int NOT NULL,LastName varchar(255) NOT NULL,FirstName varchar(255),Address varchar(255),City varchar(255))
实例三:UNIQUE:
CREATE TABLE Persons(Id_P int NOT NULL UNIQUE,LastName varchar(255) NOT NULL,FirstName varchar(255),Address varchar(255),City varchar(255))
实例四:PRIMARY KEY:
CREATE TABLE Persons(Id_P int NOT NULL PRIMARY KEY,LastName varchar(255) NOT NULL,FirstName varchar(255),Address varchar(255),City varchar(255))
实例五:FOREIGN KEY:
CREATE TABLE Orders(O_Id int NOT NULL PRIMARY KEY,OrderNo int NOT NULL,Id_P int FOREIGN KEY REFERENCES Persons(Id_P))
实例六:CHECK:
CREATE TABLE Persons(Id_P int NOT NULL CHECK (Id_P>0),LastName varchar(255) NOT NULL,FirstName varchar(255),Address varchar(255),City varchar(255))
实例七:DEFAULT:
CREATE TABLE Persons(Id_P int NOT NULL,LastName varchar(255) NOT NULL,FirstName varchar(255),Address varchar(255),City varchar(255) DEFAULT ‘Sandnes‘)
--------------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第U6个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● CREATE INDEX 语句:
1. CREATE INDEX 语句用于在表中创建索引。在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据。
2. CREATE INDEX 语法:
CREATE INDEX index_nameON table_name (column_name)
实例一:
CREATE INDEX PersonIndexON Person (LastName)
实例二:降序:
CREATE INDEX PersonIndexON Person (LastName DESC)
实例三:多个列:
CREATE INDEX PersonIndexON Person (LastName, FirstName)
--------------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第U7个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● DROP(撤销索引、表以及数据库):
1. 通过使用 DROP 语句,可以轻松地删除索引、表和数据库。
2. DROP INDEX 语法:
DROP INDEX table_name.index_name
DROP TABLE 语法:
DROP TABLE 表名称
DROP DATABASE 语法:
DROP DATABASE 数据库名称
如果我们仅仅需要除去表内的数据,但并不删除表本身,那么我们该如何做呢?
请使用 TRUNCATE TABLE 命令(仅仅删除表格中的数据):
TRUNCATE TABLE 表名称
--------------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第U8个 ╠══════════════════════════════════════════════════╣
╚════════╝
●·● ALTER TABLE 语句:
1. ALTER TABLE 语句用于在已有的表中添加、修改或删除列。
2. ALTER TABLE 语法:添加列:
ALTER TABLE table_nameADD column_name datatype
删除列:
ALTER TABLE table_name DROP COLUMN column_name