基础查询

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

位置

  • 单独作用在字段上,只能放在开头。反例如下
    SELECTdepartment_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