MySQL数据库 05 基础查询
视频参考自:P18 - P27
https://www.bilibili.com/video/BV1xW411u7ax
配套的SQL脚本:https://shimo.im/docs/XxPk6wg8CqqrdhTv/read
基础查询介绍:
-- 基础查询 /* 语法: SELECT 查询列表 FROM 表名; 查询列表可以是:表中的字段、常量值、表达式、函数。 查询的结果是一个虚拟的表格 */ # 查询表的单个字段:员工表的姓名字段 SELECT last_name FROM employees; # 查询表的多个字段:员工的全名和邮箱 SELECT first_name,last_name,email FROM employees; # 可以随意编写查询的字段顺序 SELECT first_name,email,last_name FROM employees; # 查询employees表的所有字段 # 如果手残总是打错字,可以直接双击字段或者表、库, # SQLyog会直接在光标位置生成对应的字段名称 SELECT `employee_id`,`first_name`,`last_name`,`email`,`phone_number`,`job_id`,`salary`,`commission_pct`,`manager_id`,`department_id`,`hiredate` FROM employees; # 太长了一行看不见,可以先用鼠标框选SQL语句,按【F12】调整格式 SELECT `employee_id`, `first_name`, `last_name`, `email`, `phone_number`, `job_id`, `salary`, `commission_pct`, `manager_id`, `department_id`, `hiredate` FROM employees; # 点着也费劲,直接上通配符 * 处理,* 表示所有的字段 SELECT * FROM `employees`; -- 查询的注意事项: # SQLyog会自动切换库的位置 # 所以在执行查询语句之前,最好先执行 USE 语句选定要查询的库【好习惯】 # [`]不是单引号,是叫【着重号】,用于修饰字段名称,区分SQL的关键字,消除歧义 # 不要写完直接点执行,框选确定的SQL语句点执行
SELECT 与 常量、表达式、函数
-- 常量值的查询 # 数值型常量 SELECT 100; # 字符型常量【MySQL 不区分字符和字符串】,要注意的是字符串或字符必须以''修饰 SELECT '阿伟输了'; -- 表达式的查询 SELECT 150 * 23; SELECT 150 % 23; -- 函数的查询 SELECT version(); # MySQL版本查询
别名的用法 Alias
-- 别名设置 Alias # 1、提高字段的可读性 # 2、如果字段过长可以使用别名来进行缩写 # 3、字段同名可采取别名来区分 # 第一种别名方式 使用AS关键字 SELECT VERSION() AS MySQL版本; SELECT `last_name` AS 姓,`first_name` AS 名 FROM `employees`; # 第二种别名方式 AS关键字省略掉 SELECT VERSION() MySQL版本; SELECT `last_name` 姓,`first_name` 名 FROM `employees`; # 特殊情况 out put 具有特殊含义 此SQL语句报错无法执行 SELECT `salary` AS OUT put FROM `employees`; # 解决方式: 加上引号[单双皆可]修饰为一个字段,防止SQL歧义 SELECT `salary` AS "out put" FROM `employees`;
去重的简单使用
-- 去除重复 DISTINCT # 案例:查询员工表的所有部门编号 SELECT DISTINCT `department_id` FROM `employees`; # DISTINCT 关键字: 用来对查询的字段进行重复去除,放在字段的前面,类似形容词
MySQL 加号的正确用法:
-- +号的作用 # 拼接员工的姓 和 员工的名 SELECT `last_name` + `first_name` AS '员工姓名' FROM `employees`; # 查询结果都是0... # MySQL的+ 功能:只做运算符,不能像Java一样去拼接字符串 /* SELECT 100 + 90; 两个操作数,都是数值,做加法运算 SELECT '123' + 90; 一个字符串,一个数值,MySQL会先把字符串转换数字,如果转换成功,继续加法运算 SELECT 'john' + 90; 像这样的转换失败,字符型数值转换为0 继续做加法运算 SELECT null + 10; 只要其中一个操作数为null,这个结果就是null */
CONCAT函数 拼接字符串的简单使用
-- 使用CONCAT();函数处理字符串拼接 SELECT CONCAT("我","爱 学","Java"); # 别名优化下字段 SELECT CONCAT("我","爱 学","Java") AS title; # 解决上面的案例问题 SELECT `last_name`,`first_name`,CONCAT(`last_name`,'.',`first_name`) AS '员工姓名' FROM `employees`;
案例练习:
# 下列语句是否执行成功? 可以√ SELECT `last_name`,`job_id`,`salary` AS sal FROM `employees`; SELECT * FROM `employees`; # 找出SQL语句的错误 【引号修饰问题】 SELECT `employee_id`,`last_name`,`salary` * 12 AS ”annual salary“ FROM `employees`; # 显示表departments的结构,并查询所有数据 DESC `departments`; SELECT * FROM `departments`; # 显示员工表的全部job_id 不可重复 SELECT DISTINCT `job_id` FROM`employees`; # 显示员工表的全部列,各个列之间逗号分割,列头显示out_put SELECT CONCAT( `employee_id` , ', ', `first_name`, ', ', `last_name`, ', ', `email`, ', ', `phone_number`, ', ', `job_id`, ', ', `salary`, ', ', IFNULL(`commission_pct`,0), # 设置该字段如果是null值,使用0替换 ', ', `manager_id`, ', ', `department_id`, ', ', `hiredate` ) AS 'out put' FROM `employees`;
快速检索的神SQL:
select * from `information_schema`.`TABLES` where LOWER(TABLE_NAME) = 'tm_labour_set_part'
用于查询某个表所在库的位置