#进阶1:基础查询
/*
语法:
select 查询列表 from 表名;
类似于: System.out.prinln(打印东西)
特点:
1、查询列表可以是:表中的字段、常量值、表达式、函数
2、查询的结果是一个虚拟的表格
*/
#1.查询表中的单个字段
SELECT last_name FROM employees;
#2.查询表中的多个字段
SELECT last_name, salary, salary, email FROM employees;
#3.查询所有字段
SELECT * FROM employees;
#4.查询常量值
SELECT 'john'
#5.查询表达式
SELECT 100 * 20
#6.查询函数
SELECT VERSION();
#7.起别名
/*
1、便于理解
2、如果要查询的字段有重名的情况,使用别名可以区分开来
*/
SELECT 100 * 10 AS 结果;
SELECT last_name AS 姓, first_name AS 名 FROM employees;
#方式二:使用空格
SELECT last_name 姓, first_name 名 FROM employees
#案例:查询salary,显示结果为out put
SELECT salary AS 'out put' FROM employees
#8.去重
#案例:去重查询员工表中的部门编号
SELECT DISTINCT department_id FROM employees;
#9.+号的作用
/*
java中的+号
1、运算符:两个操作数都为数值型
2、连接符“只要有一个操作数为字符串
select 100+90 两个操作数都为数值型,则作加法运算
select 100+'123' 只要其中一方为字符型,试图将字符型数值转换成数值型
如果转换成功,则继续做加法运算
如果转换失败,则将字符型数值转换成0
select null +10 只要其中一方为null,则结果肯定为null
*/
#案例:查询员工名和姓连接成一个字段,并显示为姓名
SELECT last_name + first_name FROM employees
SELECT CONCAT(last_name, first_name) AS 姓名 FROM employees
#显示表结构
DESC departments;
SELECT IFNULL(commission_pct,0) AS 奖金率, commission_pct FROM employees
SELECT CONCAT(`first_name`, ',' ,`last_name`, ',' ,`job_id`, ',', IFNULL(commission_pct,0) ) AS emp FROM employees
#进阶2:条件查询
/*
写在where后面 对行进行筛选,返回bool类型的值,如果某行中的列数据满足条件,则加入结果集,否则不出现在结果集中
比较运算符:=,>,>=,<,<=,!=或<>
between ... and ...表示在一个连续的范围内
in表示在一个非连续的范围内
逻辑运算符:and,or,not
模糊查询:用于处理字符串类型的值,运算符包括:like % _ [] ^
%与_写在[]中表示本身的含义
在[]表示一个连续的范围可以使用-
^写在[]内部的开头,表示不使用内部的任何字符
null的判断:使用is null或is not null,与其它值计算时返回null,排序时null被认为是最小
优先级:小括号,not,比较运算符,逻辑运算符
*/
/*
语法:
select
查询列表 3
from
表名 1
where
筛选条件; 2
分类:
1、按条件表达式筛选
条件运算符:> < = != <> >= <=
2、按逻辑表达式筛选
作用:用于连接条件表达式
逻辑运算符:&& || !
and or not
3、模糊查询
like:一般搭配通配符使用,可以判断字符型或数值型
通配符:%任意多个字符,_任意单个字符
between and
in
is null 判断某字段或表达式是否为null,如果是,则返回1,否则返回0
is not null
*/
if null 函数:判断某字段或表达式是否为null,如果为null,返回指定的值,否则返回原本的值select if null(commission_pct,0) from employees
#1.按条件表达式查询
#案例1:查询工资>12000的员工信息
SELECT * FROM employees WHERE salary > 12000;
#案例2:查询部门编号不等于90号的员工们和部门编号
SELECT last_name, department_id FROM employees WHERE department_id <> 90
#2、按逻辑表达式筛选
#案例1,查询工资在1000到2000
SELECT last_name, salary, commission_pct FROM employees WHERE salary>=10000 AND salary<=20000;
#模糊查询
/**
like
特点:
1、一般和通配符搭配使用
%任意多个字符,包含0个字符
_任意单个字符
between and
in
is null
/
*/
#案例;查询 like ,查询员工名中包含字符a的员工信息
SELECT * FROM employees WHERE last_name LIKE '%a%';
#案例2:查询员工名中第三个字符为e, 第五个字符为a的员工名字
SELECT *FROM employees WHERE last_name LIKE '__n_l%';
#案例3:查询员工名第二个字符为_的员工名
SELECT last_name FROM employees WHERE last_name LIKE '_\_%'
SELECT last_name FROM employees WHERE last_name LIKE '_S_%' ESCAPE 'S'
# 2. between and
/*
1、使用between and 可以提高语句的见解读
2、包含临界值
3、两个临界值不能调换顺序
*/
#案例1:查询员工编号在100到120之间的员工信息
SELECT * FROM employees WHERE employee_id >= 100 AND employee_id <=120;
SELECT * FROM employees WHERE employee_id BETWEEN 100 AND 120
#3.in
/*
含义:判断某字段的值是否属于in列表中的某一项
使用in提高语句见解读
in列表的值类型必须一致或兼容
*/
#案例:查询员工的工种编号是IT_PROG、AD_PRES、ad_VP中的一个员工名和工种编号
SELECT last_name, job_id FROM employees WHERE job_id = 'IT_PROG' OR job_id = 'AD_PRES' OR job_id = 'AD_VP';
#去重只能是一个字段
SELECT DISTINCT job_id FROM employees WHERE job_id IN ('IT_PROG', 'AD_PRES', 'AD_VP')
SELECT DISTINCT last_name, job_id FROM employees WHERE job_id IN ('IT_PROG', 'AD_PRES', 'AD_VP')
#案例4 is null
/*
=或<>不能用于判断null值
*/
#案例1:查询没有奖金的员工名和奖金
SELECT last_name, commission_pct FROM employees WHERE commission_pct IS NULL;
#案例1:查询有奖金的员工名和奖金
SELECT last_name, commission_pct FROM employees WHERE commission_pct IS NOT NULL;
#安全等于 <=>
SELECT last_name, commission_pct FROM employees WHERE commission_pct <=> NULL;
#案例2:查询工资为12000的员工信息
SELECT last_name, salary FROM employees WHERE salary <=> 12000;
#is null pk <=>
/*
is null :仅仅可以判断null值
<=> 既可以判断null值,又可以判断普通的数值,建议用上面的
*/
#题目
#1:查询没有奖金,且工资少于18000的salary,last_name
SELECT last_name, salary ,commission_pct FROM employees WHERE commission_pct IS NULL AND salary < 18000
#2:查询employees表中,job_id 不为‘IT’ 或者 工资为12000的员工信息
SELECT * FROM employees WHERE job_id <> 'IT' OR salary = 12000
网友评论