一、基础命令
- use XXX; 命令用于选择数据库。
- set names utf8; 命令用于设置使用的字符集。
- SELECT * FROM Websites; 读取数据表的信息。
– 标签里小写方便辨认单词。
- SELECT - 从数据库中提取数据
select
- UPDATE - 更新数据库中的数据
update
- DELETE - 从数据库中删除数据
delete
- INSERT INTO - 向数据库中插入新数据
insert into
- CREATE DATABASE - 创建新数据库
create database
- ALTER DATABASE - 修改数据库
alter database
- CREATE TABLE - 创建新表
create table
- ALTER TABLE - 变更(改变)数据库表
alter table
- DROP TABLE - 删除表
drop table
- CREATE INDEX - 创建索引(搜索键)
create index
- DROP INDEX - 删除索引
drop index
1.SELECT DISTINCT
SELECT DISTINCT
返回唯一不同的值。
SELECT DISTINCT column_name,column_name
FROM table_name;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IhePwNAn-1601028675490)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200925111720054.png)]
执行后的结果返回"country" 列中选取唯一不同的值。也算是去重。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YHjn6SmD-1601028675513)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200925111810296.png)]
2.DELETE
可以在不删除表的情况下,删除表中所有的行。这意味着表结构、属性、索引将保持不变。
DELETE FROM table_name;
或
DELETE * FROM table_name;
3.SELECT TOP
用于规定要返回的记录的数目。
- 对于拥有数千条记录的大型表来说,是非常有用的。
- 并非所有的数据库系统都支持
SELECT TOP
语句。MySQL 支持LIMIT
语句来选取指定的条数数据, Oracle 可以使用ROWNUM
来选取。
SQL Server / MS Access 语法
SELECT TOP number|percent column_name(s)
FROM table_name;
MySQL 语法
SELECT column_name(s)
FROM table_name
LIMIT number;
-- 实例:
SELECT *
FROM Persons
LIMIT 5;
二、高级命令
1.LIKE
LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。
例子:
选取 name 以字母 “G” 开始的所有客户:
SELECT * FROM Websites
WHERE name LIKE 'G%';
SELECT * FROM Websites -- 选取 name 以字母 "k" 结尾的所有客户 注意百分号位置
WHERE name LIKE '%k'
SELECT * FROM Websites -- 选取 name 包含模式 "oo" 的所有客户:
WHERE name LIKE '%oo%';
结果:
- “%” 符号用于在模式的前后定义通配符
2. 通配符
通配符可用于替代字符串中的任何其他字符。
- 通配符与 SQL LIKE 操作符一起使用。
- SQL 通配符用于搜索表中的数据。
通配符 | 描述 |
% | 替代 0 个或多个字符 |
_ | 替代一个字符 |
[charlist] | 字符列中的任何单一字符 |
[^charlist] 或 [!charlist] | 不在字符列中的任何单一字符 |
MySQL 中使用 REGEXP
或 NOT REGEXP
运算符 (或 RLIKE
和 NOT RLIKE
) 来操作正则表达式。
SELECT * FROM Websites -- 选取 name 以 "G"、"F" 或 "s" 开始的所有网站:
WHERE name REGEXP '^[GFs]';
3. IN
IN 操作符允许您在 WHERE 子句中规定多个值。
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...);
4. BETWEEN(取值)
BETWEEN 操作符用于选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;
5. UNION(合并)
SQL UNION 操作符合并两个或多个 SELECT 语句的结果。
- UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同。
- UNION 操作符只会选取不同的值。如果允许重复的值,请使用 UNION ALL。
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
SQL UNION ALL
则会列出所有的值。
6.SELECT INTO(复制)
备份、复制。
例子:
1.创建 Websites 的备份复件:
SELECT *
INTO WebsitesBackup2016
FROM Websites;
2.只复制一些列插入到新表中:
SELECT name, url
INTO WebsitesBackup2016
FROM Websites;
可以加where。
7.INSERT INTO SELECT (复制)
也是复制。
INSERT INTO table2
SELECT * FROM table1;
INSERT INTO Websites (name, country) -- 实例
SELECT app_name, country FROM apps;
select into from 和 insert into select 都是用来复制表
两者的主要区别为:
- select into from 要求目标表不存在,因为在插入时会自动创建;
- insert into select from 要求目标表存在。
8.创建库和表
SQL CREATE DATABASE 创建库
CREATE DATABASE dbname;
SQL CREATE TABLE 创建表
CREATE TABLE table_name
(
column_name1 data_type(size),
column_name2 data_type(size),
column_name3 data_type(size),
....
);
实例:
CREATE TABLE Persons
(
PersonID int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);
9.SQL 约束
SQL 约束用于规定表中的数据规则。
如果存在违反约束的数据行为,行为会被约束终止。
约束:
- NOT NULL - 指示某列不能存储 NULL 值。约束强制字段始终包含值。
- UNIQUE - 保证某列的每行必须有唯一的值。
- PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。
- FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。
- CHECK - 保证列中的值符合指定的条件。
- DEFAULT - 规定没有给列赋值时的默认值。
-
UNIQUE
和PRIMARY KEY
约束均为列或列集合提供了唯一性的保证。
CREATE TABLE table_name -- 在创建表的时候插入约束
(
column_name1 data_type(size) constraint_name,
column_name2 data_type(size) constraint_name,
column_name3 data_type(size) constraint_name,
....
);
例如:
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (Id_P) //PRIMARY KEY约束
)
添加 NOT NULL 约束
ALTER TABLE Persons --小写方便辨认 alter table
MODIFY Age int NOT NULL; --小写方便辨认 modify
删除 NOT NULL 约束
ALTER TABLE Persons
MODIFY Age int NULL; -- 不写NULL就可以了。
其他约束增删方法也一样
10.索引
菜鸟教程的索引方法和廖雪峰教程的索引方法不太一样。
菜鸟教程:
CREATE INDEX index_name
ON table_name (column_name)
廖雪峰教程:
ALTER TABLE students
ADD INDEX idx_score (score);
11.删除
DROP + 要删除的关键词名字 + xx名
DROP INDEX table_name.index_name -- 索引
DROP TABLE table_name -- 表
DROP DATABASE database_name --数据库
TRUNCATE TABLE table_name -- 删除表内的数据,但并不删除表本身
12.ALTER TABLE
ALTER TABLE 语句用于在已有的表中添加、删除或修改列。
在表中添加列
ALTER TABLE table_name
ADD column_name datatype -- 删除的时候就把add编程drop
改变表中列的数据类型
ALTER TABLE table_name
ALTER COLUMN column_name datatype
13.AUTO INCREMENT(自增)
CREATE TABLE Persons
(
ID int NOT NULL AUTO_INCREMENT, -- 这里设置了AUTO_INCREMENT
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (ID)
)
14.视图
新建视图
CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
更新视图
CREATE OR REPLACE VIEW view_name AS -- view_name: 要更改的视图。
SELECT column_name(s)
FROM table_name
WHERE condition
删除视图
DROP VIEW view_name
15.日期函数Date
MySQL Date 函数
函数 | 描述 |
返回当前的日期和时间 | |
返回当前的日期 | |
返回当前的时间 | |
提取日期或日期/时间表达式的日期部分 | |
返回日期/时间的单独部分 | |
向日期添加指定的时间间隔 | |
从日期减去指定的时间间隔 | |
返回两个日期之间的天数 | |
用不同的格式显示日期/时间 |
SQL Date 数据类型
MySQL 使用下列数据类型在数据库中存储日期或日期/时间值:
- DATE - 格式:YYYY-MM-DD
- DATETIME - 格式:YYYY-MM-DD HH:MM:SS
- TIMESTAMP - 格式:YYYY-MM-DD HH:MM:SS
- YEAR - 格式:YYYY 或 YY
SQL Server 使用下列数据类型在数据库中存储日期或日期/时间值:
- DATE - 格式:YYYY-MM-DD
- DATETIME - 格式:YYYY-MM-DD HH:MM:SS
- SMALLDATETIME - 格式:YYYY-MM-DD HH:MM:SS
- TIMESTAMP - 格式:唯一的数字
**提示:**如果您希望使查询简单且更易维护,那么请不要在日期中使用时间部分!