Mysql-查询语句
创建emp,dept,salgrade表
#创建salgrade表
create table salgrade
(grade int(2) primary key,
losal float(7,2),
hisal float(7,2)
)engine=innodb default charset=utf8;
#创建dept表
create table dept
(deptno int(2) primary key,#主键约束
dname varchar(20) not null,#非空约束
loc varchar(20) not null,
index dept_index(deptno) #表示在deptno列上创建索引dept_index
)engine=innodb default charset=utf8;
#创建emp表
create table emp
(empno int(4) primary key,
ename varchar(20) not null,
job varchar(10) not null,
mgr int(4),
hiredate date not null,
sal float(7,2) not null,
comm float(7,2),
deptno int(2),
index emp_index(deptno),
foreign key(deptno) references dept(deptno) on delete cascade on update cascade #在deptno列上创建外键约束,引用dept表的deptno列,具有级联删除和修改
)engine=innodb default charset=utf8;
向其中插入数据
#向dept表插入数据
insert into dept values
(10,'ACCOUNTING','NEW YORK'),
(20,'RESEARCH','DALLAS'),
(30,'SALES','CHICAGO'),
(40,'OPERATIONS','BOSTON');
#向salgrade 表中插入数据
insert into salgrade values
(1,700,1200),
(2,1201,1400),
(3,1401,2000),
(4,2001,3000),
(5,3001,9999);
#向 emp 表中插入数据
insert into emp values
(7369,'SMITH','CLERK',7902,'1980-12-17',800,null,20),
(7499,'ALLEN','SALESMAN',7698,'1981-02-20',1600,300,30),
(7521,'WARD','SALESMAN',7698,'1981-02-22',1250,500,30),
(7566,'JONES','MANAGER',7839,'1981-04-02',2975,null,20),
(7654,'MARTIN','SALESMAN',7698,'1981-09-28',1250,1400,30),
(7698,'BLAKE','MANAGER',7839,'1981-05-01',2850,null,30),
(7782,'CLARK','MANAGER',7839,'1981-06-09',2450,null,10),
(7788,'SCOTT','ANALYST',7566,'1987-07-13',3000,null,20),
(7839,'KING','PRESIDENT',null,'1981-11-07',5000,null,10),
(7844,'TURNER','SALESMAN',7698,'1981-09-08',1500,0,30),
(7876,'ADAMS','CLERK',7788,'1987-07-13',1100,null,20),
(7900,'JAMES','CLERK',7698,'1981-12-03',950,null,30),
(7902,'FORD','ANALYST',7566,'1981-12-03',3000,null,20),
(7934,'MILLER','CLERK',7782,'1982-01-23',1300,null,10);
dept表
salgrade表
emp 表
1) select
基本语法:
select 列名1,列2,... from 表1,表2,..;
【例】查询emp表中员工的姓名
select ename from emp;
查询结果
1)查询所有列
语法:
select 列1,列2,... from 表名;
[例] 查询dept表中的所有列
select deptno,dname,loc from dept;
所有列名可以用 * 代替
select * from dept;
2)算术运算
注意 :对数值型和日期型数据可用算数运算创建表达式
如:在员工表emp中所有人工资加100,并显示员工名,涨工资前的工资
select ename,sal,sal+100 from emp;
查询结果
如:在员工表emp中所有人的年薪工资
select ename,sal*12 from emp;
如:在员工表emp中所有人每天的工资
select ename,sal/30from emp;
3)空值
空值: 是指不可用,不知道,不适用的值,空值不等于零或空格,包括空值的算法表达式等于空
【例】查询员工表中所有员工的姓名,月收入(工资+奖金)
select ename,sal+comm from emp;
4)列的别名
【例】查询员工表中所有员工的姓名,年薪(12个月的工资)
用as取别名
select ename,sal*12 as "年薪" from emp;
不用as也可
select ename,sal*12 "年薪" from emp;
5)重记录
关键字:distinct
如查询员工表中的mgr数据未去重
select mgr from emp;
查询结果
使用distinct 去重
select distinct mgr from emp;
结果
【练习】从emp表中查询员工姓名,工资,奖金,以及年收入(工资+奖金的总和*12),给年收入列取别名”年收入”
6) 限定和排序
① where子句:限定查询返回的记录
注意:
- 在Where子句中字符串和日期要用单引号扩起来
- 对字符串不区分大小写,可以使用BINARY关键字设定字符串区分大小写
- 日期值是格式敏感的
- 在Where子句后面不能使用列的别名限定查询
如: 查询员工表中职位为clerk的员工的姓名,职位,部门号exercise1``exercise
select ename,job,deptno from emp where job = 'clerk';
查询结果
binary 关键字设定字符串区分大小写
select ename,job,deptno from emp where job = binary 'CLERK';
8)比较运算符
比较运算符:=、>、>=、<、<=、<>/!=
【例】查询员工表中工资大于2000的员工的姓名,工资
select ename,sal from emp
where sal > 2000.00;