基础查询
select 查询列表 from 表名。其中
查询列表是查询结果(虚拟表)中要显示的内容,可以是表中的字段、常量值、表达式、函数,是对结果集的格式化输出。类似system.out.println().
查询结果是一个虚拟表。
查询表的单个、多个字段、所有字段
查询结果顺序同表中字段顺序无关。
- 逐个列出字段,可自定义输出顺序。
- 使用*号查询全部。
查询常量值
常量值包括数值、字符。查询字符和日期必须使用引号括起来。
注意在sql中字符和字符串都被认为是字符,单引号或双引号都可使用。
select 100;//输出100
select “abc” ;//输出abc
select ‘abc’; //输出abc
查询表达式
select 表达式;
先计算表达式,再输出结果
select 100%98; //输出2
查询函数
select 方法名(实参列表);
mysql的函数必须有返回值,其含义可以理解为 select 返回值,即查询列表只有一个返回值字段,这就进入了一般情况中。
类似高级语言中的方法调用
select version(); //输出数据库版本
起别名AS
修改查询列表的列名,多用于将查询列表中的若干列转换为一列,为该列起别名。便于理解,同时对于查询字段有重名情况,使用别名可以区分字段。
两种使用方式
- 使用as关键字
select 表字段 as 别名 from 表名 - 使用空格
select 表字段 别名 from 表名 //表字段和别名之间有一个空格。
注意,如果别名中包含特殊符号,需要用单双引号包裹,不能使用小括号。
去重distinct
位置
- 单独作用在字段上,只能放在开头。反例如下
SELECT
department_id,DISTINCT location_id FROM departments;
//未放在开头 - 同函数连用,没有位置限制。?
作用
- 对于单列字段,distinct具有去重作用。
- 对于多列,distinct只会过滤掉多列都相同的记录。相当于把查询列表中的所有字段连接成一个字段,做去重处理。
SELECT DISTINCT `department_id`,location_id FROM departments;
虽然( department_id = 10,location_id = 20)和 department_id = 10,location_id = 30)两条记录的department_id 子段值相同,但location_id 不相同。以上语句认为这两条记录不同,不会过滤,即会输出到结果中。
类似逻辑与操作,多列的值都相同,distinct才认为相同。
加号
在高级语言中,“+”被视为运算符和连接符。在sql中,加号只做运算符使用。
- 若两个操作数都是整数,则输出相加结果。
- 若两个操作数中存在字符型,mysql会尝试将其强转数值型。
- 数值字符型,可转换成功
SELECT '20'+10;//30(20 + 10)
- 非数值字符型,强转失败。将字符型转换为0。
SELECT 'a'+10;//10(0 + 10)
- 若两个操作数中存在null,则输出结果一定为null。
SELECT null+10;//null
拼接字符串concat
加号无法提供字符串拼接功能,mysql提供concat函数实现对多个查询字段的拼接。注意是函数,加小括号。
concat的参数可以是多个,参数可以是表字段,也可以是自定义的字符。
典型实例是对结果集中的‘姓’和‘名’字段拼接成全名,并起别名。
SELECT
CONCAT(`first_name`,'-',`last_name`)
AS 姓名
FROM employees
Isnull函数
判断某个字段或表达式是否为null,返回值是1表示是,0表示不是。
这类似IS语句,是一个逻辑判断语句。注意和ifnull区分。
Ifnull判空函数
null拼接问题
在mysql中,若要拼接的字段中存在某些值为null的字段,那么整个拼接结果都为null.
#若commission_pct不为空,输出其值后缀’123‘;对于commission_pct为null的行,拼接结果为null。
SELECT CONCAT(commission_pct,'123') FROM employees
针对这种情况,mysql提供ifnull函数,给null的字段设置默认值,避免了null与其他值拼接的问题。
ifnull语法和作用
在ifNull(参数1,参数2)中,参数1表示要判断是否为null的字段,参数2表示参数1字段为null情况下的默认值。
这类似IF语句,即控制语句,空与不空走两条路子,注意和isnull区别。
#ifnull基础用法
SELECT IFNULL(commission_pct,123)FROM employees//若commission_pct为null,则其取值为123
#字符串拼接中包含null
SELECT
CONCAT(`last_name`,',',`phone_number`,IFNULL(commission_pct,123))//使用ifnull函数进行字段判空
AS put_put
FROM employees