查询的方式有三种:选择、投影、连接
Select 子句 from 子句
where 子句
order by 排序
having 子句
group by 分组
union 连接
1.无条件单表查询(1)查询表中所有的列
select * from emp;
(2)查询表中指定列
select eno,ename from emp;可以更改列的顺序
(3)算术运算符
Select 子句中支持加减乘除和函数
Eg.查看员工年薪
Select ename,empno,sal*12+comm from emp;
Eg.员工转正后,月薪上调20%, 请查询出所有员工转正的月薪;转正日期为入职后的6个月
select ENAME '员工姓名' , SAL '实习工资' , hiredate '入职日期', hiredate+interval 6 month '转正日期', sal*1.2 '转正工资' from emp;
Eg.员工试用期6个月,转正后月薪上调20%,请查询所有员工工作第一年的年薪所得
(不考虑奖金部分,年薪的试用期6个月的月薪+转正后的6个月的月薪)
select ENAME '员工姓名' , SAL '实习工资' , hiredate '入职日期', hiredate+interval 6 month '转正日期', sal*6+sal*1.2*6 '年薪' from emp;
select ename,sal,DATE_ADD(hiredate,INTERVAL 6 MONTH) as newdate from emp;
(4)null
任何值与null计算结果都为null
通过ifnull 将 null 置为0
select ename,sal*12+ifnull(comm,0) from emp;
(5)别名
Select 列 ‘列名’ from emp;
Select 列 as ‘列名’ from emp
Eg.员工试用期6个月,转正后月薪上调20%,请查询出所有员工工作第一年的所有收入,需要考虑奖金部分,要求显示列标题为员工姓名,工资收入, 奖金收入,总收入
select ENAME '员工姓名' , sal*6+sal*1.2*6 '工资收入', ifnull(comm, 0) '奖金收入' , sal*6+sal*1.2*6+ifnull(comm, 0) '年薪' from emp;
(6)连接字符串
Oracle 使用||进行字符串连接
Sql server 使用+进行字符串连接
Mysql 使用cancat()函数进行字符串连接
字符串常量被称为原义字符串
select concat(ename,' 的岗位是 ',job) '员工岗位' from emp;
(7)消除重复行
select distinct job from emp;
2.条件单表查询
(1)where
关系运算符(< <= > >= <> != = )
可以对数值型 字符型 日期型 直接进行运算
select empno,ename,deptno from emp where ename>'王'
特殊运算符(between and in like is null)
between 上限 and 下限 结果集操作包含上限和下限对应的行
like 模糊查询 %零个或者多个字符 _表示有且仅有一个字符,可以通过escape标示符实现对_ % 本身这两个字符的查找
不区分大小写
select empno,ename,deptno from emp where empno between '00002' and '00003';
select * from emp where comm in(500,800);
select empno,ename,deptno from emp where empno in('00002','00003' );
select * from emp where ename like '王%';
select * from emp where hiredate like '__03%';
select * from emp where ename like '%/_%' escape '/';
逻辑运算符(and or not) 优先级not and or
(2)order by
默认为升序 asc
降序序显式声明为desc
select * from emp order by deptno desc;
select ename,job from emp order by deptno asc;
多列排序
select * from emp order by deptno asc,sal desc;
select ename,job from emp order by 2 asc;
3.分页limit 0,5 0代表起始行 5代表起始行开始连续的行的个数
4.mysql中用命令行复制表结构(1)只复制表结构到新表
CREATE TABLE 新表 SELECT * FROM 旧表 WHERE 1=2;
或者 CREATE TABLE 新表 LIKE 旧表 ;
(2)复制表结构及数据到新表
CREATE TABLE 新表 SELECT * FROM 旧表
(3)复制旧表的数据到新表(假设两个表结构一样)
INSERT INTO 新表 SELECT * FROM 旧表
(4)复制旧表的数据到新表(假设两个表结构不一样)
INSERT INTO 新表(字段1,字段2,.......) SELECT 字段1,字段2,...... FROM 旧表