9.1.简单查询
9.1.1语法
select 字段名1,字段名2,......from表名;
示例:使用test数据库
select ename from emp; select ename,job,hiredate from emp; select ename 姓名,job 职业,hiredate 入职时间 from emp; select empno,ename,sal‘your sal’from emp;
9.2用法
9.2.1字符串的连接
eg:编号为7369的雇员,姓名为SMITH,职位为clerk
select concat(‘编号为’,empno‘的雇员,姓名为’,ename,‘职位为’,job)from emp;
四则运算
select ename雇员姓名,sal*12年薪 from emp; select ename雇员姓名,(sal+comm)*12年薪 from emp;
注意:在mysql中,null值与任何值进行运算,结果为null
9.2.2去除重复列
选择:从原表中选择符合条件的行
投影:从选择中选择符合关系的列
select empno编号,ename姓名,sal工资,hiredate入职时间 from emp; where ename=‘smith’;
注:字符串要用单撇号或双撇号括起来(null为空值)
例:查询非null的情况
select*from emp where comm is not null;
单表查询
一、准备数据
语法:source:d:\init;随后我会给大家放到文末
二、基本查询
select 字段名1 as 别名1,字段名2,as 别名2 from表名 where 条件 order by排序【asc|desc】 select *from emp;查询emp
EMPNO雇员编号 JOB领导者 comm奖金 MGR职属领导 HIREDATE入职时间 sal工作 DEPTNO部门编号
注意:not in 不属于
例:查询emp中所有职位
select job from emp; select distinct job from emp;——distinct表示去掉重复值
小结:投影操作——从原表选择列
9.3限定查询(选择操作)
select 列名1 别名1,列名2 别名2......from 别名 where 条件;
小结:从原表中选择符合条件的行
9.3.1>、>=、
例:查询工资大于1500元的雇员信息
select *from emp where sql>1500;
例:查询雇员编号不是7349的雇员信息
select *from emp where empno <>7349;
例:查询姓名是smith的雇员编号,姓名,工资和入职时间
select empno,ename,sal,hiredate from emp where ename='smith';
注意:字符串要使用单撇号括起来,同时mysql中的ci字符不区分大小写
9.4多表查询
9.4.1简介
用户要查询的字段来自于多张表,一般来讲多张表之间都会存在着一对多的关系
父表:主关键字所在的表
子表:外部关键字所在的表
子表和父表之间一对多关系
9.4.2基本语法
select 字段名1,别名1,字段名2,别名2......from 表名1 表别名1 表名2 表别名2 where查询条件 and 连接条件 order by排序字段 asc|desc
例:将emp表与dept表进行多表查询(笛卡尔积)极力避免
select* from emp,dept;
连接查询:去掉重复属性的等值相连
deptno部门编号 loc部门地址 Dname部门名称
9.4.3连接查询示例
1.例:查询姓名,雇员编号、工资和所在部门的名称及位置
select ename as 雇员姓名,empno as 雇员编号,sal as 工资,dname as 部门名称 ,loc as 部门地址 from emp,dept where emp.deptno=dept.deptno; 内联:select e.ename as 雇员姓名, e.empno as 雇员编号, e.sal as 工资, d.dname as 部门名称, d.loc as 部门地址 from emp e inner join dept d on e.deptno = d.deptno;
2.例:查询雇员姓名、工资、入职时间、所在部门编号,部门名称
select e.ename as 雇员姓名,e.sal as 工资,e.hiredate as 入职时间,d.deptno,dname from emp e,dept d where e.deptno=d.deptno; 内联:select e.ename as 雇员姓名, e.sal as 工资, e.hiredate as 入职时间, d.deptno, d.dname from emp e inner join dept d on e.deptno = d.deptno;
3.例:查询雇员姓名、雇员工资、领导姓名、领导工资(自连接查询)
select e.ename as 雇员姓名,e.sal as 雇员工资, m.ename as 领导姓名,m.sal as 领导工资 from emp e,emp m where e.mgr=m.empno; 内联:select e.ename as 雇员姓名, e.sal as 雇员工资, m.ename as 领导姓名, m.sal as 领导工资 from emp e inner join emp m on e.mgr = m.empno;
4.例:查询雇员姓名、雇员工资、部门名称、领导姓名、领导工资
select e.ename 雇员姓名,e.sal 雇员工资,d.dname 部门名称,m.ename 领导姓名,m.sal 领导工资 from emp e,emp m,dept d where e.mgr=m.empno and e.deptno=d.deptno; 内联:select e.ename as 雇员姓名, e.sal as 雇员工资, d.dname as 部门名称, m.ename as 领导姓名, m.sal as 领导工资 from emp e inner join emp m on e.mgr = m.empno inner join dept d on e.deptno = d.deptno;
5.例:查询雇员姓名、雇员工资、部门名称、工资所在等级。(非等值查询
select e.ename 雇员姓名,e.sal 雇员工资,d.dname 部门名称, s.grade 工资等级 from emp e,dept d,salgrade s where e.deptno=d.deptno and e.sal between s.losal and s.hisal; 内联:select e.ename as 雇员姓名, e.sal as 雇员工资, d.dname as 部门名称, s.grade as 工资等级 from emp e inner join dept d on e.deptno = d.deptno inner join salgrade s on e.sal between s.losal and s.hisal;
6.例:查询雇员姓名,雇员工资,部门名称,雇员工资等级,领导姓名、领导工资,领导工资等级
select e.ename as 雇员姓名,e.sal as 雇员工资,d.dname as 部门名称,s.grade as 雇员工资等级,m.ename as 领导姓名,m.sal as 领导工资,ms.grade as 领导工资等级 from emp e,dept d,salgrade s,emp m,salgrade ms where e.deptno = d.deptno and e.mgr = m.empno and e.sal between s.losal and s.hisal and m.sal between ms.losal and ms.hisal; 内联:select e.ename as 雇员姓名, e.sal as 雇员工资, d.dname as 部门名称, s.grade as 雇员工资等级, m.ename as 领导姓名, m.sal as 领导工资, ms.grade as 领导工资等级 from emp e inner join dept d on e.deptno = d.deptno inner join salgrade s on e.sal between s.losal and s.hisal inner join emp m on e.mgr = m.empno inner join salgrade ms on m.sal between ms.losal and ms.hisal;
7.例:查询雇员编号,雇员姓名,工资和部门名称
select e.empno,e.ename,e.sal,d.dname from emp e,dept d where e.deptno=d.deptno; 内联:select e.empno, e.ename, e.sal, d.dname from emp e inner join dept d on e.deptno = d.deptno;
8.例:查询工资大于1500的雇员姓名,部门名称和领导姓名
select e.ename 雇员姓名,e.sal 雇员工资,d.dname 部门名称,m.ename 领导姓名 from emp e, dept d,emp m where e.deptno=d.deptno and e.mgr=m.empno and e.sal>1500; 内联:select e.ename as 雇员姓名, e.sal as 雇员工资, d.dname as 部门名称, m.ename as 领导姓名 from emp e inner join dept d on e.deptno = d.deptno inner join emp m on e.mgr = m.empno where e.sal > 1500;