CREATE
DATABASE
CREATE DATABASE uoj_app233;
TABLE
CREATE TABLE UserInfo (
column1 datatype [constraint],
column2 datatype [constraint],
column3 datatype [constraint],
......
);
SQL约束
- SQL约束为表中的数据指定规则
- 约束用于限制可以进入表中的数据类型,确保了表中数据的准确性和可靠性,如果约束和数据操作之间存在任何冲突,则操作将中止
- 列级约束&表级约束
约束 | 含义 |
---|---|
NOT NULL |
指示某列不能存储空值 |
UNIQUE |
保证某列的每行必须有唯一的值 |
PRIMARY KEY |
NOT NULL 和UNIQUE 的结合 |
FOREIGN KEY |
确保一个表中的数据匹配另一个表中的值的参照完整性 |
CHECK |
保证列中的值符合指定的条件 |
DEFAULT |
规定没有给列赋值时的默认值 |
INDEX |
索引用于非常快速地从数据库中创建和检索数据 |
MySQL
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
CHECK (Age>=18)
);
SQL Server/Oracle/MS Access
CREATE TABLE Persons(
ID int NOT NULL,
varchar(255) NOT NULL,
LastName varchar(255),
FirstName int CHECK (Age>=18)
Age );
如果要命名CHECK约束,以及为多个列定义CHECK约束,可以使用:
MySQL/SQL Server/Oracle/MS Access
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
City varchar(255),
CONSTRAINT CHK_Person CHECK (Age>=18 AND City='Sandnes')
);
DROP
DROP DATABASE uoj_app233;
- 删除数据库之前要小心,删除数据库将导致数据库中存储的完整信息丢失
SHOW
SHOW DATABASES;
SHOW TABLES;
查看数据库
//输出所有数据库
show databases; use <database-name>; //切换到数据库
tables; //展示当前数据库下的所有表
show index from <table-name>; //展示一个表的表头 show
表操作
rename table <old-table-name> to <new-table-name>; //重命名表
SELECT
- MySQL中SELECT不一定要FROM子句
SELECT 1+1;
SELECT NOW();
SELECT CONCAT('John', ' ', 'Doe');
- 如果希望使用FROM子句,但不想引用表,可以使用dual表
SELECT select_list FROM dual;
- 可以用AS为列分配别名,使得回答更具有可读性
SELECT CONCAT('Jane',' ','Doe') AS 'Full Name';
ORDER BY
- 使用ORDER BY子句,按一列或多列对结果集进行排序
- 使用ASC选项按升序对结果集进行排序,使用DESC选项按降序对结果集进行排序
SELECT ... FROM ... ORDER BY column1 ASC, column2 DESC;
SELECT orderNumber, quantityOrdered * priceEach AS subtotal
FROM orderDetails
ORDER BY subtotal DESC;
- ORDER BY子句总是在FROM和SELECT子句之后计算
- 在MySQL中,NULL低于非NULL值
假设我需要根据销售订单的状态按以下顺序对销售订单进行排序:
- Processing
- On Hold
- Cancelled
- Resolved
- Disputed
- Shipped
SELECT orderNumber, orderStatus FROM orders ORDER BY FIELD(orderStatus, 'Processing','On Hold', 'Cancelled', 'Resolved', 'Disputed', 'Shipped')
WHERE
可以在SELECT、UPDATE和DELETE语句中使用WHERE
- 使用WHERE子句按条件过滤行
- MySQL在FROM子句之后,SELECT和ORDER BY子句之前评估WHERE子句
LIMIT/TOP/ROWNUM
MySQL语法
SELECT * FROM Customers LIMIT 5;
SQL Server语法
SELECT TOP 50 PERCENT * FROM Customers;
- 使用这些子句来限制SELECT语句返回的行数,在包含数千条记录的大型表很有用,返回大量记录可能会影响性能
INSERT INTO
- 使用INSERT INTO语句向表格中插入新的行
UPDATE
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
- 使用UPDATE语句修改表中的现有记录
- 如果忽略了WHERE子句,那么所有的记录都会被更新
DELETE
DELETE FROM table_name WHERE condition;
- 使用DELETE语句删除表中的记录
- 如果忽略了WHERE子句,那么所有的记录都会被删除,但该表格仍然存在
集函数
MIN()
SELECT MIN(Price) AS SmallestPrice FROM Products;
- 返回一列中的最小值,NULL值不包含在计算中
MAX()
SELECT MAX(Price) AS LargestPrice FROM Products;
- 返回一列中的最大值,NULL值不包含在计算中
COUNT()
SELECT COUNT(ProductID) FROM Products;
- 返回匹配指定条件的行数
AVG()
SELECT AVG(Price) FROM Products;
- 返回数值列的平均值,NULL值不包括在计算中
SUM()
SELECT SUM(Quantity) FROM OrderDetails;
- 返回数值列的求和结果
通配符
SQL Server中的通配符
符号 | 描述 | 例子 |
---|---|---|
% |
代表零个或多个字符 | bl% finds bl, black, blue and blob |
_ |
代表单个字符 | h_t find hot, hat and hit |
[] |
表示括号内的任意单个字符 | h[oa]t finds hot and hat |
^ |
表示任何不在括号中的字符 | h[^oa]t finds hit, but not hot and hat |
- |
代表一系列字符 | c[a-b]t finds cat and cbt |