# add all and as asc between by desc distance distinct from group if in join like limit left not null on or outer order select set to where
3.1 Sql数据库命令
windows中表名不区分大小写,但是linux中是区分的。
★运行某一句命令应选中再运行
show databases; //展示数据库 drop database xxx; //删除数据库 CREATE DATABASE 数据库名; //创建数据库 USE database_name; //选择(指定)数据库
3.2 Sql数据表命令
create table xxx; //创建表 DROP TABLE xxx; //删除表
对列和行的命令:
desc xxx; //描述表结构,字段、列 ALTER tabler xxx MODIFY name VARCHAR(200); //修改列,列的名字和数据类型 ALTER tabler xxx RENAME name to xxx; //修改某一列的名字 ALTER tabler xxx ADD COLUMN xxx DATETIME; //添加字段 ALTER tabler xxx DROP COLUMN xxx; //删除某一字段
// 实例 CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL, email VARCHAR(100) NOT NULL, birthdate DATE, is_active BOOLEAN DEFAULT TRUE );
3.3 数据的增删查改
查询数据
SELECT * from xxx; //查询, “*” 代表所有的列 SELECT column1, column2, ... FROM table_name [WHERE condition] //是一个可选的子句,用于指定过滤条件,只返回符合条件的行。 [ORDER BY column_name [ASC | DESC]] //用于指定结果集的排序顺序,默认是升序(ASC)。 [LIMIT number]; //用于限制返回的行数。
-- 选择所有列的所有行 SELECT * FROM users; -- 选择特定列的所有行 SELECT username, email FROM users; -- 添加 WHERE 子句,选择满足条件的行 SELECT * FROM users WHERE is_active = TRUE; -- 添加 ORDER BY 子句,按照某列的升序排序 SELECT * FROM users ORDER BY birthdate; -- 添加 ORDER BY 子句,按照某列的降序排序 SELECT * FROM users ORDER BY birthdate DESC; -- 添加 LIMIT 子句,限制返回的行数 SELECT * FROM users LIMIT 10;
-- 使用 AND 运算符和通配符 SELECT * FROM users WHERE username LIKE 'j%' AND is_active = TRUE; -- 使用 OR 运算符 SELECT * FROM users WHERE is_active = TRUE OR birthdate < '1990-01-01'; -- 使用 IN 子句 SELECT * FROM users WHERE birthdate IN ('1990-01-01', '1992-03-15', '1993-05-03');
// 模糊匹配 SELECT * FROM customers WHERE first_name LIKE 'J%';
// IN 条件 SELECT * FROM countries WHERE country_code IN ('US', 'CA', 'MX'); // 也可以NOT···IN··· SELECT * FROM countries WHERE country_code NOT IN ('US', 'CA', 'MX');
// NOT 条件 SELECT * FROM products WHERE NOT category = 'Clothing';
// BETWEEN 条件 SELECT * FROM orders WHERE order_date BETWEEN '2023-01-01' AND '2023-12-31';
// IS NULL 条件 SELECT * FROM employees WHERE department IS NULL; // IS NOT NULL 条件 SELECT * FROM customers WHERE email IS NOT NULL;
4.2 LIKE子句
LIKE 子句中使用百分号 **%**字符来表示任意字符。
如果没有使用百分号 %, LIKE 子句与等号 = 的效果是一样的。
// 语法 SELECT column1, column2, ... FROM table_name WHERE column_name LIKE pattern;
SELECT * FROM products WHERE product_name LIKE '_a%'; // 选择产品名称的第二个字符为 'a' 的所有产品。
// 3. 组合使用 % 和 _:
SELECT * FROM users WHERE username LIKE 'a%o_'; // 匹配以字母 'a' 开头,然后是零个或多个字符,接着是 'o',最后是一个任意字符的字符串,如 'aaron'、'apol'。
// 4. 不区分大小写的匹配:
SELECT * FROM employees WHERE last_name LIKE 'smi%' COLLATE utf8mb4_general_ci; // 选择姓氏以 'smi' 开头的所有员工,不区分大小写。
4.3 UNION 操作符
// 语法 SELECT column1, column2, ... FROM table1 WHERE condition1 UNION SELECT column1, column2, ... FROM table2 WHERE condition2 [ORDER BY column1, column2, ...];
1. 基本的 UNION 操作:
SELECT city FROM customers UNION SELECT city FROM suppliers ORDER BY city; // 选择客户表和供应商表中所有城市的唯一值,并按城市名称升序排序。
4.4 ORDER BY(排序)
// 语法 SELECT column1, column2, ... FROM table_name ORDER BY column1 [ASC | DESC], column2 [ASC | DESC], ...;
// 使用 NULLS FIRST 或 NULLS LAST 处理 NULL 值
SELECT product_name, price FROM products ORDER BY price DESC NULLS LAST; // 选择产品表 products 中的产品名称和价格,并按价格降序 DESC 排序,将 NULL 值排在最后。
// 使用表达式排序
SELECT product_name, price * discount_rate AS discounted_price FROM products ORDER BY discounted_price DESC; // 选择产品表 products 中的产品名称和根据折扣率计算的折扣后价格,并按折扣后价格降序 DESC 排序。
// 使用数字表示列的位置:
SELECT first_name, last_name, salary FROM employees ORDER BY 3 DESC, 1 ASC; // 选择员工表 employees 中的名字和工资列,并按第三列(salary)降序 DESC 排序,然后按第一列(first_name)升序 ASC 排序。
4.5 GROUP BY 语句
GROUP BY 语句根据一个或多个列对结果集进行分组。
在分组的列上我们可以使用 COUNT, SUM, AVG,等函数。
GROUP BY 语句是 SQL 查询中用于汇总和分析数据的重要工具,尤其在处理大量数据时,它能够提供有用的汇总信息。
// 语法 SELECT column1, aggregate_function(column2) FROM table_name WHERE condition GROUP BY column1;
4.6 MySql连接
使用 MySQL 的 JOIN 在两个或多个表中查询数据。
INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。
// 语法 SELECT column1, column2, ... FROM table1 INNER JOIN table2 ON table1.column_name = table2.column_name;