目录
一、基本的查询语句
1.1 SELECT ... FROM
语法:
SELECT 标识选择哪些列 FROM 标识从哪个表中选择
选择全部列:
SELECT * FROM account;
选择特定的列:
SELECT id,NAME FROM account
- 注意:MySQL中的SQL语句是不区分大小写的,有些人习惯将关键字大写、数据列和表名小写,这是一个良好的编程习惯,利于阅读和维护。
1.2 列的别名
重命名一个列,可以空格然后紧跟列名;也可以在列名后面加入AS关键字,后面的别名使用双引号。
SELECT id accountId,NAME AS accountName FROM account
1.3 去除重复行
在SELECT语句中使用关键字DISTINCT去除重复行:
SELECT DISTINCT id ,NAME
FROM account
DISTINCT 需要放到所有列名的前面,如果写成 SELECT id, DISTINCT name FROM account 会报错。
1.4 空值参与运算
所有运算符或列值遇到null值,运算的结果都为null(在 MySQL 里面,空值是占用空间的)。
SELECT ename '姓名',joindate '入职时间', 12*salary '年薪' FROM emp
1.5 着重号
为了避免字段、表名没有和数据库保留字或常用方法冲突,可以在SQL语句中使用一对``(着重号)引起来。
SELECT * FROM `account`
1.6 显示表结构
使用DESCRIBE 或 DESC 命令,查看表结构:
DESCRIBE account
DESC account
各个字段的含义分别解释如下:
- Field:表示字段名称。
- Type:表示字段类型,这里 barcode、goodsname 是文本型的,price 是整数类型的。
- Null:表示该列是否可以存储NULL值。
- Key:表示该列是否已编制索引。PRI表示该列是表主键的一部分;UNI表示该列是UNIQUE索引的一部分;MUL表示在列中某个给定值允许出现多次。
- Default:表示该列是否有默认值,如果有,那么值是多少。
- Extra:表示可以获取的与给定列有关的附加信息,例如AUTO_INCREMENT等。
1.7 过滤数据
SELECT 字段1,字段2 FROM 表名 WHERE 过滤条件
SELECT * FROM emp WHERE joindate > '2023-03-31'
二、多表查询
多表查询是指存在一对一、一对多关系的多个表,通过关联字段完成查询操作。
2.1 笛卡尔积
笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尔积,又称直积,表示为X×Y。假设两个集合 A 和 B,则 A 和 B 的笛卡尔积就是 A 和 B 两个集合中元素的交集。
在SQL的笛卡尔积(交叉连接)有两种,显式的和隐式的&