MySQL8.0.32

发布时间 2023-05-16 16:39:32作者: Jeronasand

查询语句

语言类型

  1. 数据定义语言(DDL):用于创建、修改和删除数据库对象(如表、视图、索引等)。常见的DDL语句包括CREATE、ALTER和DROP等。

    • CREATE DATABASE:创建数据库。
    • ALTER DATABASE:修改数据库的属性。
    • DROP DATABASE:删除数据库。
    • CREATE TABLE:创建数据表。
    • ALTER TABLE:修改数据表的结构,如添加列、删除列、修改列的数据类型等。
    • DROP TABLE:删除数据表。
    • TRUNCATE TABLE:清空数据表的所有数据。
    • RENAME TABLE:重命名数据表。
    • CREATE INDEX:创建索引。
    • ALTER INDEX:修改索引。
    • DROP INDEX:删除索引。
    • CREATE VIEW:创建视图。
    • ALTER VIEW:修改视图。
    • DROP VIEW:删除视图。
    • CREATE PROCEDURE:创建存储过程。
    • ALTER PROCEDURE:修改存储过程。
    • DROP PROCEDURE:删除存储过程。
    • CREATE FUNCTION:创建函数。
    • ALTER FUNCTION:修改函数。
    • DROP FUNCTION:删除函数。
    • CREATE TRIGGER:创建触发器。
    • ALTER TRIGGER:修改触发器。
    • DROP TRIGGER:删除触发器。
    • CREATE EVENT:创建事件。
    • ALTER EVENT:修改事件。
    • DROP EVENT:删除事件。
    • CREATE USER:创建用户。
    • ALTER USER:修改用户。
    • DROP USER:删除用户。
  2. 数据操纵语言(DML):用于插入、更新和删除数据。常见的DML语句包括INSERT、UPDATE和DELETE等。

    • SELECT:查询数据。
    • INSERT:插入数据。
    • UPDATE:更新数据。
    • DELETE:删除数据。
    • REPLACE:插入或替换数据。
    • LOAD DATA INFILE:从文件中导入数据。
    • SELECT INTO OUTFILE:将查询结果导出到文件中。
    • SELECT INTO:将查询结果插入到另一个表中。
    • SET:设置变量值。
  3. 数据查询语言(DQL):用于从数据库中检索数据。常见的DQL语句是SELECT语句,它可以使用WHERE、GROUP BY、HAVING、ORDER BY等关键字来过滤、分组、聚合和排序数据。

    • SELECT:查询数据。
    • DISTINCT:返回不同的值。
    • WHERE:过滤数据。
    • ORDER BY:排序数据。
    • LIMIT:限制返回数据的行数。
    • GROUP BY:按照指定列分组。
    • HAVING:在分组后对结果进行过滤。
    • JOIN:连接两个或多个表。
    • UNION:合并多个SELECT语句的结果。
    • SUBQUERY:嵌套查询。
    • EXISTS:判断是否存在符合条件的数据。
    • IN:判断某个值是否在指定的列表中。
    • LIKE:模糊匹配。
    • BETWEEN:判断某个值是否在指定的范围内。
    • CASE:在查询语句中使用条件表达式。
  4. 数据控制语言(DCL):用于授权和撤销用户对数据库的访问权限。常见的DCL语句包括GRANT和REVOKE等。

    1. GRANT:授权。
    2. REVOKE:收回授权。
    3. CREATE USER:创建新用户。
    4. ALTER USER:修改用户信息。
    5. DROP USER:删除用户。
    6. CREATE ROLE:创建新角色。
    7. ALTER ROLE:修改角色信息。
    8. DROP ROLE:删除角色。
    9. SET PASSWORD:修改用户密码。
    10. FLUSH PRIVILEGES:刷新权限。
  5. 事务控制语言(TCL):用于控制事务的提交、回滚和保存点操作。常见的TCL语句包括COMMIT、ROLLBACK和SAVEPOINT等。

    1. START TRANSACTION:开始一个事务。
    2. COMMIT:提交一个事务,将修改保存到数据库。
    3. ROLLBACK:回滚一个事务,将修改撤销。
    4. SAVEPOINT:创建一个保存点。
    5. ROLLBACK TO:回滚到指定的保存点。
    6. RELEASE SAVEPOINT:删除指定的保存点。

数据类型

  1. 数值类型:用于存储数值数据,包括整型(INT、TINYINT、SMALLINT、MEDIUMINT、BIGINT)、浮点型(FLOAT、DOUBLE)、定点数(DECIMAL)等。
  2. 字符串类型:用于存储文本数据,包括定长字符串(CHAR)、变长字符串(VARCHAR)、文本类型(TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT)和枚举类型(ENUM)等。
  3. 日期和时间类型:用于存储日期和时间数据,包括日期类型(DATE)、时间类型(TIME)、日期时间类型(DATETIME)和时间戳类型(TIMESTAMP)等。
  4. 二进制类型:用于存储二进制数据,包括二进制类型(BINARY、VARBINARY)和大对象类型(TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB)等。

简单查询

  1. 查询表

    SELECT * FROM table_name;
    
    SELECT * FROM users;
    

    结果展示

    username userID userPassword
    Jeronasand 76 123456789
  2. 指定列

    SELECT column1, column2, ... FROM table_name;
    
    (从名为`customers`的表中查询客户的姓名和地址)
    SELECT name, address FROM customers;
    
    name address
    Jeronasand 1234156
  3. 指定列别名

    SELECT column_name AS alias_name FROM table_name;
    
    SELECT name, age AS "Employee Age" FROM employees;
    
    name Employee Age
    Jeronasand 19
    SELECT name Name, age Age FROM employees;
    SELECT name Name, age "Age" FROM employees;
    SELECT name "Name", age Age FROM employees;
    SELECT name "Name", age "Age" FROM employees;
    SELECT name 'Name', age 'Age' FROM employees;
    
    Name Age
    Jeronsand 19

where查询

SELECT column1, column2, ... FROM table_name WHERE condition;
-- codition为条件
SELECT * FROM users WHERE age > 18;
SELECT * FROM users WHERE age > 18 AND gender = 'male';
SELECT * FROM users WHERE email IS NULL;
SELECT * FROM users WHERE name LIKE '张%';
SELECT * FROM users WHERE column_name IN (value1, value2, ...);
SELECT * FROM users WHERE column_name NOT IN (value1, value2, ...);
SELECT * FROM users WHERE gender IN ('male', 'female');
SELECT * FROM users WHERE column_name BETWEEN value1 AND value2;
SELECT * FROM users WHERE column_name NOT BETWEEN value1 AND value2;
SELECT * FROM users WHERE age BETWEEN 18 AND 30;

order by查询

SELECT column1, column2, ... FROM table_name ORDER BY column1 ASC|DESC, column2 ASC|DESC, ...;
SELECT name, age, age*2 as age_double FROM users ORDER BY age DESC;

假设表 users 中的数据如下:

id name age
1 Alice 25
2 Bob 30
3 Charlie 20
4 David 35

那么执行上述查询语句的结果将是:

name age age_double
David 35 70
Bob 30 60
Alice 25 50
Charlie 20 40

分页查询

SELECT column1, column2, ... FROM table_name [WHERE condition] [ORDER BY column1, column2, ...] LIMIT [offset,] row_count;
-- []中的内容可以不写
SELECT * FROM users ORDER BY created_at DESC LIMIT 10 OFFSET 0;  
-- 显示第一页,每页显示 10 条记录

数值运算符

加减乘除:加减乘除运算符分别表示加法、减法、乘法和除法,用法非常简单,例如:

SELECT 1 + 2; -- 返回 3
SELECT 3 - 1; -- 返回 2
SELECT 2 * 4; -- 返回 8
SELECT 6 / 2; -- 返回 3

需要注意的是,在进行除法运算时,如果除数为 0,将会抛出一个错误。

取余:取余运算符 % 用于计算两个数相除后的余数,例如:

SELECT 5 % 2; -- 返回 1

数学函数

  • ABS:ABS 函数用于返回一个数的绝对值,例如:
SELECT ABS(-3.14); -- 返回 3.14
  • CEILING/FLOOR:CEILING 和 FLOOR 函数分别用于对一个数进行上取整和下取整操作,例如:
SELECT CEILING(3.14), FLOOR(3.14); -- 返回 4 和 3
  • ROUND:ROUND 函数用于对一个数进行四舍五入操作,例如:
SELECT ROUND(3.14), ROUND(3.57); -- 返回 3 和 4

​ ROUND 函数还可以指定保留小数位数,例如:

SELECT ROUND(3.1415926, 2); -- 返回 3.14
  • SQRT:SQRT 函数用于计算一个数的平方根,例如:
SELECT SQRT(4); -- 返回 2
  • POW:POW 函数用于计算一个数的幂,例如:
SELECT POW(2, 3); -- 返回 8
  • TRUNCATE:TRUNCATE 函数用于将一个数截断到指定的小数位数,例如:
SELECT TRUNCATE(3.1415926, 2); -- 返回 3.14

数值函数

  • SUM:SUM 函数用于对查询结果集中某一列进行求和,例如:
SELECT SUM(salary) FROM employees;
  • AVG:AVG 函数用于对查询结果集中某一列进行平均值计算,例如:
SELECT AVG(salary) FROM employees;
  • MAX/MIN:MAX 和 MIN 函数分别返回查询结果集中某一列的最大值和最小值,例如:
SELECT MAX(age), MIN(age) FROM users;
  • COUNT:COUNT 函数用于返回查询结果集中某一列的记录数,例如:
SELECT COUNT(*) FROM users;

字符串常量

SELECT 'Hello, world!';
SELECT "Hello, world!";
SELECT 'He said, "Don\'t do that!"';
SELECT 'First line\nSecond line';

模糊查询

-- 在 LIKE 关键字后面,可以使用通配符 % 表示任意字符序列(包括空字符序列),使用通配符 _ 表示任意单个字符。例如:
SELECT * FROM students WHERE name LIKE 'Li%';
-- 这个查询语句返回了名字以 Li 开头,并且名字总长度为 3 个字符的学生记录。注意到 _ 只能匹配一个字符,所以这里匹配的是第二个字符。
SELECT * FROM students WHERE name LIKE 'Li_';
  • LIKE 关键字通常与 % 或 _ 一起使用。
  • 在匹配时,区分大小写。如果需要不区分大小写,可以使用 LOWER() 或 UPPER() 函数将所有字符转换为小写或大写,然后进行匹配。
  • 通配符会影响查询效率,使用过多可能会导致查询变慢。如果能够确定匹配规则,可以考虑使用更精确的查询条件。

特殊字符处理

SELECT 'He said, "Don\'t do that!"';
INSERT INTO users (name, email) VALUES ('Tom O\'Neil', 'tom@example.com');
 -- 如果需要在 SQL 语句中处理包含大量特殊字符的字符串,可以使用 MySQL 内置的函数来自动转义。其中,最常用的函数是 mysql_real_escape_string() 函数。这个函数会自动转义包含在字符串中的所有特殊字符,可以避免手动添加转义字符的繁琐操作
INSERT INTO users (name, email) VALUES (mysql_real_escape_string('Tom O\'Neil'), 'tom@example.com');

字符串函数

  • CONCAT()CONCAT_WS():将多个字符串拼接为一个字符串。例如:

    SELECT CONCAT('My', 'SQL');                   -- 返回 'MySQL'
    SELECT CONCAT('My', NULL, 'SQL');             -- 返回 NULL
    SELECT CONCAT_WS('-', '2023', '05', '15');    -- 返回 '2023-05-15'
    -- 如果需要在字符串之间添加分隔符,可以使用 CONCAT_WS() 函数;
    -- 如果只需要简单的字符串连接,可以使用 CONCAT() 函数。
    
  • SUBSTRING():截取一个字符串的子串。例如:

    SELECT SUBSTRING('Hello World', 7);
    -- 返回字符串 World
    
  • UPPER()LOWER():将一个字符串转换为大写或小写。例如:

    SELECT UPPER('Hello, World!');      
    -- 返回 'HELLO, WORLD!'
    SELECT LOWER('Hello, World!');      
    -- 返回 'hello, world!'
    SELECT UPPER('MySQL 8.0');          
    -- 返回 'MYSQL 8.0'
    SELECT LOWER('MySQL 8.0');          
    -- 返回 'mysql 8.0'
    
  • LENGTH()CHAR_LENTH:返回一个字符串的长度。例如:

    SELECT LENGTH('Hello World');
    -- 返回 11
    SELECT LENGTH('你好');
    -- 返回 6
    SELECT CHAR_LENGTH('你好MySQL'); 
    -- 返回 7
    SELECT CHAR_LENGTH('你好');
    -- 返回 2
    
  • REPLACE():替换一个字符串中的部分内容。例如:

    SELECT REPLACE('Hello World', 'World', 'MySQL');
    -- 返回字符串 Hello MySQL
    
  • TRIM()LTRIM()RTRIM():去除一个字符串开头或结尾的空格。例如:

    SELECT TRIM('  abc   ');       
    -- 返回 'abc'
    SELECT TRIM(BOTH 'x' FROM 'xxxbxxx'); 
    -- 返回 'b'
    SELECT TRIM(BOTH '.' FROM '.abc.');   
    -- 返回 'abc'
    SELECT LTRIM('  abc   ');      
    -- 返回 'abc   '
    SELECT RTRIM('  abc   ');      
    -- 返回 '  abc'
    
  • LPAD()RPAD():在字符串的左侧或右侧填充指定的字符,以达到指定的长度。例如:

    SELECT LPAD('123', 5, '0');    
    -- 返回 '00123'
    SELECT RPAD('123', 5, '0');    
    -- 返回 '12300'
    SELECT LPAD('12345', 5, '0');  
    -- 返回 '12345'
    SELECT RPAD('12345', 5, '0');  
    -- 返回 '12345'
    
  • REPEAT()SPACE():用于生成指定数量的重复字符或空格。例如:

    SELECT REPEAT('*', 5);  
    -- 返回 '*****'
    SELECT REPEAT('ab', 3); 
    -- 返回 'ababab'
    SELECT CONCAT('hello', SPACE(5), 'world'); 
    -- 返回 'hello     world'
    -- 需要注意的是,SPACE() 函数只能生成空格字符,不能生成其他字符。如果要生成其他字符,可以结合 REPEAT() 函数使用。例如,要生成 5 个减号,可以使用以下语句:
    SELECT CONCAT('start', REPEAT('-', 5), 'end'); 
    -- 返回 'start-----end'
    
  • LOCATE()INSTR()POSITION() :用于查找一个字符串在另一个字符串中的位置。例如: