4、表的结构
- 不看表内容 , 只看表的结构 desc + 表名 ;
mysql> desc dept; +--------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------+-------------+------+-----+---------+-------+ | DEPTNO | int(2) | NO | PRI | NULL | | 部门编号 | DNAME | varchar(14) | YES | | NULL | | 部门名称 | LOC | varchar(13) | YES | | NULL | | 地理位置 +--------+-------------+------+-----+---------+-------+ 3 rows in set (0.15 sec) mysql> desc emp ; +----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+-------+ | EMPNO | int(4) | NO | PRI | NULL | | 员工编号 | ENAME | varchar(10) | YES | | NULL | | 员工姓名 | JOB | varchar(9) | YES | | NULL | | 工作岗位 | MGR | int(4) | YES | | NULL | | 上级编号 | HIREDATE | date | YES | | NULL | | 入职日期 | SAL | double(7,2) | YES | | NULL | | 工资 | COMM | double(7,2) | YES | | NULL | | 补助 | DEPTNO | int(2) | YES | | NULL | | 部门编号 +----------+-------------+------+-----+---------+-------+ 8 rows in set (0.00 sec) mysql> desc salgrade ; +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | GRADE | int(11) | YES | | NULL | | 工资等级 | LOSAL | int(11) | YES | | NULL | | 最低工资 | HISAL | int(11) | YES | | NULL | | 最高工资 +-------+---------+------+-----+---------+-------+ 3 rows in set (0.00 sec)
5、MySQL常用命令
- 详情参见第二部分
6、字符占用空间
- 一个字母为一个字节
- 一个汉字为三个字节
1.1 SELECT语句
- 注意:select语句不会更改原表之中的任何内容,只负责检索、查询
- select 后面可以跟字段名(自变量) , 也可以跟字面量/ 字面值(数据)
- 如果select后面跟的是字段名,那么查询字段
- 如果跟的是数据,那么会借助这个表的结构, 形成这个数据表
1.1.1 简单查询
select 字段名 from 表名 ; // 查询一个字段 select 字段名1,字段名2,... from 表名; // 查询多个字段 select * from 表名 ; // 查询所有字段(效率低、可读性差) select 字段名 as 新字段名 from 表名; // 给查询的列起别名 /*注意:只是将列名的显示改为新的名称,原表不变。select语句不会更改原表之中的任何内容 as可以省略,但只能显示一个字符。 假设起别名是有空格,加上单引号 字符串用单引号标起来(标准),双引号在oracle数据库中无法使用 在列之中的字段可以使用数学表达式 别名是中文,属于字符串,用单引号括起来即可*
1.1.2 条件查询
- 查询出来符合条件的
- 格式 : select 字段名1 , 字段名2 , 字段名3 ... from 表名 where 条件 ;
- 条件查询的条件:
- = \ <>或 != \ < \ <= \ > \ >= \ between...and ... \ is null \ and \ or \ in \ not \ like \ % \ _
1、 = 等于 【案例】:查询薪资等于800的员工的姓名和编号 select empno,ename from emp where sal=800 ; 2、<> 或 != 不等于 【案例】:查询薪资不等于800的员工的姓名和编号 select empno,ename from emp where sal<>800 ; select empno,ename from emp where sal!=800 ; 3、< 小于 【案例】:查询薪资小于2000的员工的姓名与编号 select empno,ename from emp where sal<2000 ; 4、<= 小于等于 【案例】:查询薪资小于3000的员工的姓名与编号 select empno,ename from emp where sal<=3000 ; 5、> 大于 【案例】:查询薪资小于2000的员工的姓名与编号 select empno,ename from emp where sal>4000 ; 6、>= 大于等于 【案例】:查询薪资小于2000的员工的姓名与编号 select empno,ename from emp where sal>=4000 ; 7、between... and... 两个值之间,等同于 >= and <= 注意:使用此语句时必须保证左小右大 , 闭区间,包含两端的值 【案例】:查询薪资小于2000的员工的姓名与编号 select empno,ename from emp where sal between 2000 and 4000 ; select empno,ename from emp where sal >= 2000 and sal <= 4000 ; 8、is (not) null 【案例】:查询津贴(补助)(不)为null的员工姓名和员工编号 select empno,ename from emp where comm is null; select empno,ename from emp where comm is not null ; 9、and 并且 【案例】:查询工作岗位是manager并且工资大于2500的员工信息 select * from emp where job = 'manager' and sal > 2500 ; 10、or 或者 【案例】:查询工作岗位是manager或者是salesman的员工信息 select * from emp where job = 'manager' or job = 'salesman'; 【注意】:and 和or 同时出现,and 优先级高 , 先执行and。 【语句】: select * from emp where sal > 2500 and deptno = 10 or deptno = 20 ; 表达的意义是工资大于2500并且dept = 10 的人,或者是deptno = 20 的所有人 select * from emp where sal > 2500 and (deptno = 10 or deptno = 20) ; 表达的意义是工资大于2500的人,同时是dept = 10 或者deptno = 20 的所有人 11、(not) in 包含,相当于多个or 【案例】:查询工作岗位是manager或者是salesman的员工信息 select * from emp where job in ('manager', 'salesman'); 【注意】:in后面是具体的值,不是区间 12、not not 可以取非 , 主要用在is和in之中 13、like like称为模糊查询,支持% 或者_匹配 % 匹配任意个字符 _ 一个下划线只匹配一个字符 【案例】: 找出姓名中含有'o'的员工信息 select * from emp where ename like '%o%' ; 【案例】:找出姓名中以T结尾的 select * from emp where ename like '%t'; 【案例】:找出姓名以k开始的 select * from emp where ename like 'k%'; 【案例】:找出姓名第二个字母是A的 select * from emp where ename like '_a%'; 【案例】:找出第三个字母是r的 select * from emp where ename like '__r%'; 【案例】:找出名字中含有下划线的 select * from emp where ename like '%_%'; // 反斜杠代表转义, 类似于转义字符
1.1.3 排序
- 格式 : select 字段名1 , 字段名2 , 字段名3 ... from 表名 order by 字段名 ;(默认升序排列)
- 格式: select 字段名 from 表名 where 条件 order by 排序方式 ;
【案例】:查询所有员工薪资 select ename , sal from emp order by sal ; // 默认升序 select ename , sal from emp order by sal asc ; // 指定升序排列 select ename , sal from emp order by sal desc ; // 指定降序排列 【案例】:按照员工名字和薪资排列,按照薪资升序排列,如果相同按照姓名升序排列 select ename , sal from emp order by sal asc , ename asc ; // 多字段排序 【案例】:按照查询结果的第二列排列 select ename , sal from emp order by 2 ; // 不建议,因为不健壮 【案例】:找出工资在1250到3000之间的员工信息,按照薪资的降序排列 格式: select 字段名 from 表名 where 条件 order by 排序方式 ; select ename , sal from emp where sal between 1500 and 3000 order by sal desc ;