一、表的定义
表是一种结构化的文件,可以用来存储特定类型的数据,如:学生信息、课程信息等,都可以放到表中,另外表都有特定的名称,而且不能重复。表中有以下几个概念:列、行、主键。
1.列(字段)
列,通常叫做字段,每个字段都包含:字段名称、字段数据类型、字段约束、字段长度;
2.行(记录)
行,通常叫做表中的记录。表中的数据是按行(记录)存储的,表里可以有0条或多条记录;
3.主键
主键,主键是由列构成的,表中的每一行通常都有一个标识,主键可以由一个字段戒多个字段构成,一个字段构的主键称为单一主键,多个字段构成的主键称为复合主键,主键通常是不能修改的。
二、SQL分类
DQL语句 | 数据查询语言 | select |
DML语句 | 数据操作语言 | insert delete update |
DDL语句 | 数据库定义语言 | create drop alter |
TCL语句 | 事务控制语言 | commit rollback |
DML修改数据库表中的数据,DDL是修改数据中表的结构;
三、常用命令
查看MySQL版本 | mysql --version mysql -V |
查看当前使用数据库
|
select database ();
|
查看MySQL数据库版本
|
select version();
|
创建数据库
|
create database 数据库名称;
|
终止一条语句
| \c |
查看和指定现有的数据库
|
show databases;
|
指定当前缺省数据库
|
use bjpowernode;
|
查看当前数据库中的表
|
show tables;
|
查看其它数据库中的表
|
show tables from
数据库名称;
|
查看表结构
|
desc
表名称;
|
查看表的创建语句
|
show create table
表名称
;
|
四、简单查询
1.建表语句
DROP TABLE IF EXISTS EMP;
DROP TABLE IF EXISTS DEPT;
DROP TABLE IF EXISTS SALGRADE;
CREATE TABLE DEPT
(DEPTNO int(2) not null ,
DNAME VARCHAR(14) ,
LOC VARCHAR(13),
primary key (DEPTNO)
);
CREATE TABLE EMP
(EMPNO int(4) not null ,
ENAME VARCHAR(10),
JOB VARCHAR(9),
MGR INT(4),
HIREDATE DATE DEFAULT NULL,
SAL DOUBLE(7,2),
COMM DOUBLE(7,2),
primary key (EMPNO),
DEPTNO INT(2)
)
;
CREATE TABLE SALGRADE
( GRADE INT,
LOSAL INT,
HISAL INT );
INSERT INTO DEPT ( DEPTNO, DNAME, LOC ) VALUES (
10, 'ACCOUNTING', 'NEW YORK');
INSERT INTO DEPT ( DEPTNO, DNAME, LOC ) VALUES (
20, 'RESEARCH', 'DALLAS');
INSERT INTO DEPT ( DEPTNO, DNAME, LOC ) VALUES (
30, 'SALES', 'CHICAGO');
INSERT INTO DEPT ( DEPTNO, DNAME, LOC ) VALUES (
40, 'OPERATIONS', 'BOSTON');
commit;
INSERT INTO EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM,
DEPTNO ) VALUES (
7369, 'SMITH', 'CLERK', 7902, '1980-12-17'
, 800, NULL, 20);
INSERT INTO EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM,
DEPTNO ) VALUES (
7499, 'ALLEN', 'SALESMAN', 7698, '1981-02-20'
, 1600, 300, 30);
INSERT INTO EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM,
DEPTNO ) VALUES (
7521, 'WARD', 'SALESMAN', 7698, '1981-02-22'
, 1250, 500, 30);
INSERT INTO EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM,
DEPTNO ) VALUES (
7566, 'JONES', 'MANAGER', 7839, '1981-04-02'
, 2975, NULL, 20);
INSERT INTO EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM,
DEPTNO ) VALUES (
7654, 'MARTIN', 'SALESMAN', 7698, '1981-09-28'
, 1250, 1400, 30);
INSERT INTO EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM,
DEPTNO ) VALUES (
7698, 'BLAKE', 'MANAGER', 7839, '1981-05-01'
, 2850, NULL, 30);
INSERT INTO EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM,
DEPTNO ) VALUES (
7782, 'CLARK', 'MANAGER', 7839, '1981-06-09'
, 2450, NULL, 10);
INSERT INTO EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM,
DEPTNO ) VALUES (
7788, 'SCOTT', 'ANALYST', 7566, '1987-04-19'
, 3000, NULL, 20);
INSERT INTO EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM,
DEPTNO ) VALUES (
7839, 'KING', 'PRESIDENT', NULL, '1981-11-17'
, 5000, NULL, 10);
INSERT INTO EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM,
DEPTNO ) VALUES (
7844, 'TURNER', 'SALESMAN', 7698, '1981-09-08'
, 1500, 0, 30);
INSERT INTO EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM,
DEPTNO ) VALUES (
7876, 'ADAMS', 'CLERK', 7788, '1987-05-23'
, 1100, NULL, 20);
INSERT INTO EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM,
DEPTNO ) VALUES (
7900, 'JAMES', 'CLERK', 7698, '1981-12-03'
, 950, NULL, 30);
INSERT INTO EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM,
DEPTNO ) VALUES (
7902, 'FORD', 'ANALYST', 7566, '1981-12-03'
, 3000, NULL, 20);
INSERT INTO EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM,
DEPTNO ) VALUES (
7934, 'MILLER', 'CLERK', 7782, '1982-01-23'
, 1300, NULL, 10);
commit;
INSERT INTO SALGRADE ( GRADE, LOSAL, HISAL ) VALUES (
1, 700, 1200);
INSERT INTO SALGRADE ( GRADE, LOSAL, HISAL ) VALUES (
2, 1201, 1400);
INSERT INTO SALGRADE ( GRADE, LOSAL, HISAL ) VALUES (
3, 1401, 2000);
INSERT INTO SALGRADE ( GRADE, LOSAL, HISAL ) VALUES (
4, 2001, 3000);
INSERT INTO SALGRADE ( GRADE, LOSAL, HISAL ) VALUES (
5, 3001, 9999);
commit;
2.查询员工姓名
select ename from emp;
3.查询员工编号和员工姓名
select empno,ename from emp;
4.查询全部字段
select * from emp;
5.计算员工年薪
1)列出员工的编号,姓名和年薪
select empno,ename,sal*12 from emp;
2)将查询出来的字段重命名和显示为中文
select empno,ename,sal * 12 as ‘年薪’from emp;
五、条件查询
1.支持如下运算符
运算符 | 说明 |
= | 等于 |
<>或!= | 不等于 |
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
between..and... | 两个值之间 |
is null | 为null |
and | 并且 |
or | 或者 |
in | 包含 |
not | not可以取非,主要用在is或in |
like | like为模糊查询,支持%或_匹配 |
2.查询薪水为5000的员工
select empno,ename,sal from emp where sal = 5000;
3.查询job为MANAGER的员工
select empno,ename,job from emp where job =“manager”;
4.查询薪水不等于5000的员工
select empno,ename,sal from emp where sal <> 5000;
5.查询工作岗位不等于MANAGER的员工
select empno,ename,job from emp where job <>„MANAGER‟;
6.查询薪水为1600到3000的员工
select empno,ename,sal from emp where sal between 1600 and 3000;
7.查询津贴为空的员工
select empno,ename,comm from emp where comm is null;
8.查询工作岗位为“MANAGER”并且薪水大于2500的员工
select empno,ename,job,sal from emp where job ="MANAGER" and sal > 2500;
9.查询出 job 为 SALESMAN 和 job为MANAGER的员工
select ename,job from emp where job = 'SALESMAN' or job = 'MANAGER';
10.查询出Job为 SALESMAN 和 Job为 MANAGER 的员工
select ename,job from emp where job in ('SALESMAN','MANAGER');
11.查询出薪水不为1600和3000的员工
select ename,sal from emp where sal not in (1600,3000);
12.查询出薪水不是1600和薪水不是3000的员工
select ename,sal from emp where not (sal = 1600 or sal = 3000);
select ename,sal from emp where sal not in (1600,3000);
select ename,sal from emp where sal <> 1600 and sal <> 3000;
13.查询以姓名以 M 开头的所有员工‘M%’
select ename from emp where ename like 'M%';
14.查询姓名以N结尾的所有员工‘%N’
select ename from emp where ename like '%N';
15.查询姓名中包含O的所有员工‘%O%’
select ename from emp where ename like '%O%';
16.查询姓名中第二个字符为A的所有员工‘_A%’
select ename from emp where ename like '_A%';
17.查询姓名中倒数第二个字符为E的所有员工‘%E_’
select ename from emp where ename like '%E_';
18.查询姓名中第三个字符为N的所有员工姓名‘__R%’
select ename from emp where ename like '__R%';