文章目录
一、数据库操作
1. 创建数据库
CREATE DATABASE 数据库名;
CREATE DATABASE mydb;
2. 删除数据库
DROP DATABASE 数据库名;
DROP DATABASE mydb;
3. 选择数据库
USE 数据库名;
USE mydb;
二、表操作
1. 创建表
CREATE TABLE 表名称(
字段名 数据类型 ...其他定义,
...
);
CREATE TABLE book(
id int not null PRIMARY KEY AUTO_INCREMENT, -- AUTO_INCREMENT可以实现自动增加
title varchar(50) not null ,
auther varchar(50) not null
);
2. 删除表
DROP TABLE 表名称;
DROP TABLE mytable;
三、增删改查
1. 增
-- 增加记录
INSERT INTO 表名(字段1, 字段2...字段n)
VALUES(值1, 值2, ... , 值n);
INSERT INTO book(id, title, auther)
VALUES(1, "数据结构", "严蔚敏");
-- 增加索引
CREATE INDEX索引名
ON 表名(字段名);
CREATE INDEXIX_id
ON book(id);
-- 增加字段
ALTER TABLE 表名
ADD 字段名 数据类型 ...其他定义;
ALTER TABLE book
ADD price int not null;
-- 增加约束
ALTER TABLE表名
ADD CONSTRAINT 约束名 PRIMARY KEY (字段); -- 可选foreign key
ALTER TABLEbook
ADD CONSTRAINT PK_bid PRIMARY KEY (id);
2. 删
#删除记录,只有删除记录用delete
DELETE FROM 表名[WHERE条件]; //[]表示可选
DELETE FROM book
WHERE id=1;
#删除索引
DROP INDEX 表名.索引名;
DROP INDEX book.IX_id;
#删除字段
ALTER TABLE 表名
DROP COLUMN 字段名;
ALTER TABLE book
DROP COLUMN price;
#删除约束
ALTER TABLE 表名
DROP CONSTRAINT 约束名;
ALTER TABLE book
DROP CONSTRAINT PK_bid;
3. 改
#改数据
UPDATE 表名 SET 字段1=值1, 字段2=值2
[WHERE 条件];
UPDATE book SET auther="张伟"
WHERE id=1;
#改字段
AlTER TABLE 表名
MODIFY[change] COLUMN 字段名称 类型;
AlTER TABLE book
MODIFY COLUMN id char(5) not null; -- modify修改字段属性
AlTER TABLE book
change COLUMN id bid char(5) not null; -- change a b,把字段名从a改为b,可指定其他属性
4. 查
1. SELECT
SELECT 字段1, 字段2
FROM 表名
[WHERE 条件][LIMIT 数字][OFFSET 数字];
SELECT * FROM book; -- *表示 所有
- 查询语句中你可以使用一个或者多个表,表之间使用逗号(,)分割,并使用WHERE语句来设定查询条件。
- SELECT 命令可以读取一条或者多条记录。
- 你可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据
- 你可以使用 WHERE 语句来包含任何条件。
- 你可以使用 LIMIT 属性来设定返回的记录数。
- 你可以通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0。
2. LIMIT
SELECT * FROM 表名 LIMIT 条件
SELECT * FROM book LIMIT 5,10; -- 检索记录行 6-15
#为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1:
SELECT * FROM book LIMIT 95,-1; -- 检索记录行 96-last.
#如果只给定一个参数,它表示返回最大的记录行数目:
SELECT * FROM book LIMIT 5; -- 检索前 5 个记录行
#换句话说,LIMIT n 等价于 LIMIT 0,n。
3. offset
#跳过1条数据,从第2条数据开始取,取3条数据,也就是取第2,3,4三条数据
SELECT * FROM article LIMIT 1,3;
#取三个数据,从1之后开始
SELECT * FROM article LIMIT 3 OFFSET 1;
三、其他语句
1. LIKE
SELECT 字段1, 字段2, ... , 字段n
FROM 表名
WHERE 字段名 LIKE条件;
SELECT *
FROM book
WHERE title LIKE"数据%";
- select 后面跟的字段,表示要筛选在控制台显示的字段
- 通配符%,%可表示任意长、任意字符
正则表达式
模式 | 描述 |
---|---|
^ | 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 ‘\n’ 或 ‘\r’ 之后的位置。 |
$ | 匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 ‘\n’ 或 ‘\r’ 之前的位置。 |
. | 匹配除 “\n” 之外的任何单个字符。要匹配包括 ‘\n’ 在内的任何字符,请使用象 ‘[.\n]’ 的模式。 |
[…] | 字符集合。匹配所包含的任意一个字符。例如, ‘[abc]’ 可以匹配 “plain” 中的 ‘a’。 |
[^…] | 负值字符集合。匹配未包含的任意字符。例如, ‘[^abc]’ 可以匹配 “plain” 中的’p’。 |
* | 匹配前面的子表达式零次或多次。例如,zo* 能匹配 “z” 以及 “zoo”。* 等价于{0,}。 |
+ | 匹配前面的子表达式一次或多次。例如,‘zo+’ 能匹配 “zo” 以及 “zoo”,但不能匹配 “z”。+ 等价于 {1,}。 |
{n} | n 是一个非负整数。匹配确定的 n 次。例如,‘o{2}’ 不能匹配 “Bob” 中的 ‘o’,但是能匹配 “food” 中的两个 o。 |
{n,m} | m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。 |
示例:
-- 查找name字段中以'st'为开头的所有数据:
SELECT name FROM person_tbl WHERE name REGEXP '^st';
-- 查找name字段中以'ok'为结尾的所有数据:
SELECT name FROM person_tbl WHERE name REGEXP 'ok$';
-- 查找name字段中包含'mar'字符串的所有数据:
SELECT name FROM person_tbl WHERE name REGEXP 'mar';
-- 查找name字段中以元音字符开头或以'ok'字符串结尾的所有数据:
SELECT name FROM person_tbl WHERE name REGEXP '^[aeiou]|ok$';
2. UNION
MySQL UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。多个 SELECT 语句会删除重复的数据。
SELECT 字段名 FROM 表名
UNION
SELECT 字段名 FROM 表名
ORDER BY 字段名;
SELECT country FROM Websites
UNION
SELECT country FROM apps
ORDER BY country;
3. ORDER BY
排序
SELECT 字段1, 字段2, ... ,字段n
ORDER BY 字段p [ASC [DESC][默认 ASC]], ... ,字段q [ASC [DESC][默认 ASC]];
SELECT * FROM book ORDER BY title ASC;
- ASC升序,默认升序
- DESC 降序
4. GROUP BY
GROUP BY 语句根据一个或多个列对结果集进行分组。
SELECT 字段... FROM 表名
WHERE 条件...
GROUP BY 字段;
SELECT column_name, function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;
5. JOIN
- INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录.
- LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
- RIGHT JOIN(右连接): 与 LEFT JOIN相反,用于获取右表所有记录,即使左表没有对应匹配的记录。
详细可以看菜鸟教程,真的不错,点击跳转
最后,想要熟悉这些语句,还是要多刷题,而难度较大的就是查询,题库可以看看我之前的博客,链接如下:
SQL查询上机题库