SQL学习笔记之连接、表操作详解

表连接

表连接

在SQL中,“表连接”表示组合来自两个或多个表的数据。表连接创建一个临时表,显示连接表中的数据。

要连接customers与 orders两个表,请在 FROM 子句中将它们指定为逗号分隔列表。

SQL 语句如下所示:

SELECT customers.ID, customers.Name, orders.Name, orders.Amount
FROM customers, orders
WHERE customers.ID=orders.Customer_ID
ORDER BY customers.ID;

注:WHERE 子句 “连接” 表,条件是来自 customers 表的 ID 应等于 orders 表的 customer_ID。

连接类型

自定义别名

通过使用 SQL,可以为表名称或列名称指定别名。

基本上,创建别名是为了让列名称的可读性更强。

例:

SELECT ct.ID, ct.Name, ord.Name, ord.Amount
FROM customers AS ct, orders AS ord
WHERE ct.ID=ord.Customer_ID
ORDER BY ct.ID;

连接类型

以下是可以在 SQL 中使用的连接类型:

– 内连接(INNER JOIN)

– 左连接(LEFT JOIN)

– 右连接 (RIGHT JOIN)

内连接(INNER JOIN)

SQL INNER JOIN 语法:

SELECT column_name(s)
FROM table1 INNER JOIN table2 
ON table1.column_name=table2.column_name;

注:

– INNER JOIN 与 JOIN是相同的。

– ON 用于指定内部连接条件。

左连接(LEFT JOIN)

LEFT JOIN 关键字从左表(table1)返回所有的行,即使右表(table2)中没有匹配。

如果右表中没有匹配,则结果为 NULL。

SQL LEFT JOIN 语法:

SELECT table1.column1, table2.column2...
FROM table1 LEFT OUTER JOIN table2
ON table1.column_name = table2.column_name;

注:在某些数据库中,LEFT JOIN 等价于 LEFT OUTER JOIN。

右连接(RIGHT JOIN)

RIGHT JOIN 关键字从右表(table2)返回所有的行,即使左表(table1)中没有匹配。

如果左表中没有匹配,则结果为 NULL。

SQL RIGHT JOIN语法:

SELECT table1.column1, table2.column2...
FROM table1 RIGHT OUTER JOIN table2
ON table1.column_name = table2.column_name;

注:在某些数据库中,RIGHT JOIN 等价于 RIGHT OUTER JOIN。

UNION 操作符

设置操作符

UNION 将多个数据集合并到单个数据集中,并删除任何现有的重复项。 UNION ALL 将多个数据集合并到一个数据集中,但不会删除重复的行。

UNION 操作符

UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
SQL UNION 语法:

SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;

注:

– UNION 内部的每个 SELECT 语句必须拥有相同数量的列。

– 列也必须拥有相似的数据类型。

– 同时,每个 SELECT 语句中的列的顺序必须相同。

– 如果你的列在所有查询中不完全匹配,您可以使用NULL(或任何其他)值。

例:

SELECT FirstName, LastName, Company FROM table3
UNION
SELECT FirstName, LastName, NULL FROM table4;

UNION ALL 操作符

UNION ALL 从每个表中选择所有行,并将它们合并成一个表中。

例:使用 UNION ALL 从 “table1” 和 “table2” 表中选取所有的记录(也有重复的值):

SELECT ID, FirstName, LastName, City FROM table1
UNION ALL
SELECT ID, FirstName, LastName, City FROM table2;

INSERT 语句

插入数据

INSERT INTO 语句用于向数据库中的表添加新的数据行。

SQL INSERT INTO 语法如下:

INSERT INTO table_name
VALUES (value1, value2, value3,...);
#或者
INSERT INTO table_name (column1, column2, column3, ...,columnN)  
VALUES (value1, value2, value3,...valueN);

注:

– 确保值的顺序与表中的列的顺序相同。

– 必须为没有默认值或不支持 NULL 的每个列提供一个值。

UPDATE 和 DELETE 语句

UPDATE 语句

UPDATE 语句用于更新表中的记录。

SQL UPDATE 的语法:

UPDATE table_name
SET column1=value1, column2=value2, ...
WHERE condition;

SET 关键字之后的逗号,用于分隔列表中指定列及其新值。

例:我们要更新员工表中“John”(ID=1) 的工资为6000,则 SQL 语句为:

UPDATE Employees 
SET Salary=6000
WHERE ID=1;

注:WHERE 子句规定哪条记录或者哪些记录需要更新。如果你省略了 WHERE 子句,所有的记录都将被更新!

更新多列

在更新数据时,我们也可以通过逗号分隔来同时更新多个列。

例:

UPDATE Employees 
SET Salary=5500, FirstName='Robert'
WHERE ID=1;

DELETE 语句

DELETE 语句用于删除表中的记录。

SQL DELETE 的语法:

DELETE FROM table_name
WHERE condition;

例:我们要从 “Employees” 表中删除 ID 为 “1” 的员工:

DELETE FROM Employees
WHERE ID=1;

注:WHERE 子句规定哪条记录或者哪些记录需要删除。如果您省略了 WHERE 子句,所有的记录都将被删除!

CREATE TABLE

SQL 表

SQL 表由表行和列组成。表列负责存储许多不同类型的数据,包括数字,文本,日期和甚至文件。 CREATE TABLE 语句用于创建数据库中的表。 创建基本表包括命名表,并定义其列和每列的数据类型。

CREATE TABLE

CREATE TABLE 语句的基本语法如下:

CREATE TABLE table_name
(
column_name1 data_type(size),
column_name2 data_type(size),
column_name3 data_type(size),
....
columnN data_type(size)
);

column_name 参数规定表中列的名称。 data_type 参数规定列的数据类型(例如 varchar、integer、decimal、date 等等)。 size 参数规定表中列的最大长度。

例:创建一个名为 “users” 的表,包含四个列:UserID,FirstName,LastName 和 City,则:

CREATE TABLE users
(
   UserID int,
   FirstName varchar(100), 
   LastName varchar(100),
   City varchar(100)
);

UserID 列的数据类型是 int,包含整数。 FirstName、LastName和 City 列的数据类型是 varchar,包含字符,且这些字段的最大长度为 255 个字符。

数据类型

最常见的数据类型:

Number 类型:

INT(size):-2147483648 到 2147483647 常规。0 到 4294967295 无符号*。在括号中规定最大位数。 FLOAT(size,d):带有浮动小数点的小数字。在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数。 DOUBLE(size,d):带有浮动小数点的大数字。在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数。

Date 类型:

DATE():日期。格式:YYYY-MM-DD。 DATETIME():*日期和时间的组合。格式:YYYY-MM-DD HH:MM:SS。 TIMESTAMP():*时间戳。TIMESTAMP 值使用 Unix 纪元(‘1970-01-01 00:00:00’ UTC) 至今的描述来存储。格式:YYYY-MM-DD HH:MM:SS。 TIME():时间。格式:HH:MM:SS。

String 类型:

VARCHAR(size):保存可变长度的字符串(可包含字母、数字以及特殊字符)。在括号中指定字符串的最大长度。最多 255 个字符。 TEXT:存放最大长度为 65,535 个字符的字符串。

注:SQL 开发人员必须在创建 SQL 表时决定表中的每个列将要存储的数据的类型。

创建主键

每个表最好选择一个唯一非空的字段作为主键。

例:下面的 SQL 在 “users” 表创建时,使用 PRIMARY KEY 关键字将 “UserId” 列定义为主键:

CREATE TABLE users
(
   UserID int,
   FirstName varchar(100),
   LastName varchar(100),
   City varchar(100),
   PRIMARY KEY(UserID)
); 

NOT NULL 和 AUTO_INCREMENT

SQL 约束

SQL 约束用于规定表中的数据规则。

在 SQL 中,我们有如下约束:

– NOT NULL :指示某列不能存储 NULL 值。

– UNIQUE : 保证某列的每行必须有唯一的值。

– PRIMARY KEY :等价于 NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。

– FOREIGN KEY : 保证一个表中的数据匹配另一个表中的值的参照完整性。

– CHECK : 保证列中的值符合指定的条件。

– DEFAULT : 规定没有给列赋值时的默认值。

例:以下表示 “name” 列不允许 NULL 值。

name varchar(100) NOT NULL  

注:约束可以在创建表时规定(通过 CREATE TABLE 语句),或者在表创建之后规定(通过 ALTER TABLE 语句)。

自动递增(AUTO INCREMENT)

AUTO INCREMENT 会在新记录插入表中时生成一个唯一的数字。

我们通常希望在每次插入新记录时,自动地创建主键字段的值。

例:我们把 “UserID” 列定义为 auto-increment 主键字段:

UserID int NOT NULL AUTO_INCREMENT,
PRIMARY KEY (UserID)

使用约束创建表

例:强制 “id”,“username” 和 “password” 列不接受NULL值,还将 “id” 列定义为 auto-increment 主键字段:

CREATE TABLE users (
id int NOT NULL AUTO_INCREMENT,
username varchar(40) NOT NULL, 
password varchar(10) NOT NULL,
PRIMARY KEY(id)
);

ALTER, DROP, RENAME TABLE

ALTER TABLE

ALTER TABLE 语句用于在已有的表中添加、删除或修改列。 你还可以使用 ALTER TABLE 命令在现有表上添加和删除各种约束。

例:在 “people” 表中添加一个名为 “Birthdy” 的列:

ALTER TABLE people 
ADD Birthdy date;

DROP TABLE

例:在 people 表中删除名为 “Birthday” 的列:

ALTER TABLE people 
DROP COLUMN Birthday;

若要删除整个表,则用DROP TABLE 语句:

DROP TABLE people;

RENAME TABLE

例:将名为 “FirstName” 的==列重命名==为 “name”:

ALTER TABLE people
CHANGE FirstName name varchar(55);

例:将 “people” ==表重命名==为 “users”:

RENAME TABLE people TO users;

SQL 视图

视图

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

SQL CREATE VIEW 语法:

CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition;

创建视图

例:创建一个视图,显示每个员工的 “FirstName” 和 “Salary”:

CREATE VIEW List AS
SELECT FirstName, Salary
FROM  Employees;

更新视图

你可以使用下面的语法来更新视图:

CREATE OR REPLACE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition;

例:向 “List” 视图添加 “LastName” 列:

CREATE OR REPLACE VIEW List AS
SELECT FirstName, LastName, Salary
FROM  Employees;

注:通过 DROP VIEW 命令来删除视图:

DROP VIEW List;
(0)
上一篇 2022年3月21日
下一篇 2022年3月21日

相关推荐