CRUD2
1. 查询基础语法
- 语法结构: SELECT select_expr [, select_expr ...] [FROM table_references] [WHERE where_condition]
- SELECT 是查询关键字,用于指定要查询的列。
- FROM 用于指定从哪个表查询数据 。
- WHERE 用于添加查询条件,通过运算符和列进行比较筛选数据。
- 示例
- 查询所有人的编号、姓名和语文成绩:
select id, name, chinese from exam;
2. 比较运算符
- 运算符及说明
- >, >=, <, <= :大于、大于等于、小于、小于等于。
- = :等于,对NULL比较不安全( NULL = NULL 结果为NULL )。
- <=> :等于,对NULL比较安全( NULL <=> NULL 结果为TRUE ) 。
- !=, <> :不等于。
- BETWEEN ... AND ... :范围匹配,如 value BETWEEN a0 AND a1 表示 a0 <= value <= a1 。
- IN (option, ...) :如果值在列表中则返回TRUE, NOT IN 则相反。
- IS NULL :判断是否为NULL 。
- IS NOT NULL :判断不为NULL 。
- LIKE :模糊匹配, % 表示任意多个字符, _ 表示任意一个字符 。
- 示例
- 查询英语不及格( < 60 )的同学及英语成绩:
select name, english from exam where english < 60;
- 查询语文成绩高于英语成绩的同学:
select name, chinese, english from exam where chinese > english;
- 模糊查询名字以“孙”开头的同学:
select * from exam where name like '孙%';
- 模糊查询名字是“孙”开头且总共两个字的同学:
select * from exam where name like '孙_';
3. 逻辑运算符
- 运算符及说明
- AND :多个条件都为TRUE时,结果才为TRUE,类似于Java中的 && 。
- OR :任意一个条件为TRUE,结果就为TRUE,类似于Java中的 || 。
- NOT :条件为TRUE时,结果为FALSE,类似于Java中的 ! 。
- 示例
- 查询语文成绩大于80分且英语成绩大于80分的同学:
select name, chinese, english from exam where chinese > 80 AND english > 80;
- 查询语文成绩大于80分或英语成绩大于80分的同学:
select name, chinese, english from exam where chinese > 80 OR english > 80;
4. NULL值的查询
- 查询值为NULL的数据行:
select * from exam where english is null;
- 查询值不为NULL的数据行:
select * from exam where english is not null;
- NULL与其他值运算:NULL与任何值运算结果都为NULL 。如 select 1 + null; 结果为NULL 。
5. 查询字段为表达式
- 常量表达式:在查询列表中可以使用常量,字符串常量要用单引号。如:
select id, name, 10, '查看详情' from exam;
- 列运算表达式
- 把所有学生的语文成绩加10分:
select id, name, chinese, chinese + 10 from exam;
- 计算所有学生语文、数学和英语成绩的总分:
select name, chinese + math + english from exam;
6. 排序(ORDER BY)
- 多列排序:不同的排序列用逗号隔开,后面的排序规则在前一个排序规则基础上进行。
- 查询同学各门成绩,依次按数学降序,英语升序,语文升序的方式显示:
select * from exam order by math desc, english asc, chinese asc;
- 按总分排序
- 查询同学及总分,由高到低排序:
select *, chinese + math + english as total from exam order by total desc;
- 注意:不能在 WHERE 子句中使用别名进行比较,如 select name 姓名, chinese + math + english total from exam where total < 200; 会报错 。
7. 结果去重查询(DISTINCT)
- 对指定列去重,如果多列一起去重,要求所有列的值都相同才判定为重复记录。
- 对数学成绩列去重:
select distinct math from exam;
- 对id和数学成绩列一起去重:
select distinct id, math from exam;
8. 其他操作
- 修改表结构(ALTER TABLE ):可进行添加列、修改列、删除列、重命名列、重命名表等操作 。语法格式如 ALTER TABLE tbl_name [alter_option [, alter_option] ...]; ,其中 alter_option 有多种取值 。
- 删除表(DROP TABLE ):语法为 drop table [if exists] 表名; ,这是危险操作 。
- 插入数据(INSERT INTO ):语法为 insert into 表名 (列1 [, 列2...]) values (值1 [, 值...]); ,值的顺序与列的顺序要保持一致 。
9. MySQL配置相关
- 可通过 source 命令导入SQL文件,如 mysql> source d:/database/exam.sql 。
- 可通过 show variables like '%character%'; 查看字符集相关变量 。
- MySQL服务启动时会读取配置文件(如 my.ini )中的配置 ,可以在配置文件中设置字符集等参数,如 default - character - set=utf8mb4 。