mysql-----语法规范,查询操作,分组函数,连接查询

一、SQL语言分类
DQL语言(数据查询语言)select
DML语言(数据操纵语言)insert update delete
DDL语言(数据定义语言)create alter drop
DCL语言(数据控制语言)commit rollback
二、Mysql语法规范
**不分大小写
;结尾
单行注释:#
单行注释:–
多行注释:/
*/
sql语句可以写在一行或多行,各子句一般分行写
关键字不能缩写不能分行
用缩进提高语句的可读性
三、SQLyog使用
删除表 创建表 执行sql语句 保存sql语句 打开sql文件

四、查询操作练习
导入数据

基础查询:
SELECT 100;
SELECT ‘john’; /显示常量/
SELECT 98*23; /显示表达式/
SELECT LENGTH(‘john’);
SELECT VERSION(); /显示函数(方法)/
SELECT last_name FROM employees; /显示表中的字段/
SELECT last_name,phone_number,first_name,salary,commission_pct,manager_id FROM employees; /显示表中的多个字段/
SELECT * FROM employees; /显示表中所有字段/
select last_name AS 姓,first_name AS 名 FROM employees; /起别名/
select last_name 姓,first_name 名 FROM employees; /起别名/
select last_name “out name” FROM employees; /起别名/
SELECT DISTINCT department_id FROM employees; /*去重 查询
在这里插入图片描述
注意事项:SELECT 显示; 起别名 as 去重 DISTINCT
2. 条件查询
语法: select 字段 from 表名
where 条件;
分类: <=>安全等于
and && or || not |
优先级:not>and>or

#一、按条件表达式查询
#案例1:查询月薪>5000的员工信息
SELECT * FROM employees WHERE salary>5000;
#二、按逻辑表达式查询
#案例1:查询月薪在5000到12000的员工工资和姓名
SELECT salary,last_name FROM employees WHERE salary>= 5000 ANDsalary<=12000;
3. 模糊查询

1.like
一般搭配着通配符使用,用作字符型的判断通配符:
% 任意多个字符
_ 任意单个字符 1
2.between and
特点:在…之间
①等价于 使用 字段>=值1 and 字段<=值2
②两个临界值是包含的 [1,10]
③两个临界值不能颠倒顺序
3.in
特点:判断某个字段的值是否在某个列表内in(值1,值2,…)
等价于 or
4.is null/is not nul

#查询姓名中包含字符E的员工信息 like
select *from employees
where last_name LIKE ‘%e%’;
#显示出表employees部门编号在80-100之间 的姓名、职位 betweenand
SELECT last_name,job_id,department_id
FROM employees
WHERE department_id BETWEEN 80 AND 100;
WHERE department_id BETWEEN 100 AND 80;
#案例1:显示出表employees的manager_id 是 100,101,110 的员工姓名、职位 in
SELECT last_name,job_id,manager_id
FROM employees
WHERE manager_id IN(100,101,110);
#案例1:查询没有奖金的员工 is null/is not null
SELECT * FROM employees
WHERE commission_pct IS NULL;

  1. 排序查询
    语法:
    select 字段|表达式|常量
    from 表
    【where 条件】
    order by 排序的字段;
    1.升序 asc
    降序 desc
    默认是 升序asc
    2.可以按表达式、函数、别名、多个字段进行排序
    3.一般来讲order by放到查询的语句的最后,在不使用分页的情况下

#一、按单个字段进行排序
SELECT * FROM employees ORDER BY salary ;
SELECT * FROM employees ORDER BY salary DESC;
#二、按多个字段进行排序
SELECT * FROM employees
ORDER BY salary DESC,employee_id ASC;
#三、按表达式排序
#案例:按年薪降序
SELECT ,salary12*(1+IFNULL(commission_pct,0)) 年薪
FROM employees
ORDER BY salary12(1+IFNULL(commission_pct,0)) DESC;
#四、按别名排序
#案例:按年薪降序
SELECT ,salary12*(1+IFNULL(commission_pct,0)) 年薪
FROM employees
ORDER BY 年薪 DESC;
#五、按函数排序
#案例:按姓名中的字节长度大小降序
SELECT last_name,LENGTH(last_name)
FROM employees
ORDER BY LENGTH(last_name) DESC;


五、分组函数与查询**
分组函数
分类:
max():最大值min():最小值sum():和avg():平均值count():计算非空的个数这些是通用的,sqlserver、oracle、mysql 都是一样的
特点:
1、sum、avg只支持数值型,count、max、min支持任何类型
2、这几个分组函数,都忽略null值
3、count()分组函数,支持以下写法count() 建议使用count(1)表示 查询结果集的行数
注意:count(1)性能没有count()高
因为count(*),sql服务器对其进行了优化 效率高
分组查询
分组查询一般都会用到分组函数
语法:
select 分组函数 别名,分组后的字段
from 表
【where 分组前筛选】
group by 分组的字段
【having 分组后筛选】
【order by 排序的字段】
从上到下依次顺序,不能颠倒顺序
分组查询的特点:
1、按多个字段分组,字段间用逗号隔开,没有顺序要求
2、可以和分组函数一起查询的字段,只能是分组后的字段,不能是任意字段
3、分组筛选 针对的表 位置 使用的关键字
分组前筛选 原始表 group by的前面 where
分组后筛选 分组后的结果集 group by的后面 having
顺序:where——group by——having
4、having和group by支持别名

#一、普通的分组查询
#01 案例:查询各部门的最高工资和部门号
SELECT MAX(salary),department_id FROM employees
GROUP BY department_id;
#二、按多个字段分组
#案例:查询每个工种、每个部门的平均工资
SELECT AVG(salary),job_id,department_id
FROM employees
GROUP BY job_id,department_id;
#三、分组查询+筛选having
#筛选条件分两类:
#分组前筛选:筛选的条件针对的是原始表
#分组后筛选:筛选的条件针对的是分组后的结果集
#分组前筛选 原始表 group by的前面 where
#分组后筛选 分组后的结果集 group by的后面 having
#where——group by——having
#案例1:查询有奖金的,每个部门的最高奖金率
SELECT MAX(commission_pct) 最高奖金率,department_id
FROM employees
WHERE commission_pct IS NOT NULL
GROUP BY department_id;
#四、having子句支持别名
#案例:查询每个地区的部门个数,求个数大于2的部门个数和地区号
SELECT COUNT(*) 个数,location_id
FROM departments
GROUP BY location_id
HAVING 个数>2;
#五、排序 order by 支持别名
#案例:查询员工姓名中包含字符a,每个部门的最低工资高于3000的部门编号
,按照最低工资降序排序
SELECT department_id,MIN(salary) 最低工资
FROM employees
WHERE last_name LIKE ‘%a%’
GROUP BY department_id
HAVING MIN(salary)>3000
ORDER BY 最低工资 DESC;

*** 六、连接查询*****
概念:查询的字段来自于多个表
语法:
select
字段1,字段2
from 表1,表2
【where 连接条件】
笛卡尔乘积:
产生原因:没有加连接条件,导致结果为 表1 的行数*表2 的行
解决方法:添加上有效的`myemployees
分类:
一、传统模式的多表连接
等值连接(where)——非等值连接
二、sql99推出的标准,使用join关键字实现连接
内连接——外连接
三、自连接
一、传统模式的多表连接也叫等值连接
特点有
①表的顺序没有要求
②n表连接,至少需要n-1个连接条件
③一般需要为表起别名,这样可以提高语句简洁度,并且防止字段有歧义
④可以添加分组、排序、筛选,一起混合使用

#①案例1:查询员工名、部门名
SELECT last_name,department_name
FROM employees,departments
WHEREemployees.department_id=departments.department_id;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值