数据库查询语言——DQL

之前介绍了

  • 数据库基本常识的简介及mysql安装
  • 结构化查询语言sql
  • 数据库表介绍
  • 数据库的数据类型
  • 数据操作语言DML——数据的增删改查
  • 数据库对象操作语言DDL——修改、删除数据库表等对象
  • 数据库的完整性约束

接下来说一下DQL(data query language:数据库查询语言)操作,也就是详细介绍一下select
建议先执行下面的sql,创建基础表格,这个表格在oracle中是已经有的,当然执行下面sql创建也可以。

# 创建部门表
CREATE TABLE dept(
    deptno int(2) not null,
    dname varchar(14),# 部门名称
    loc varchar(13)# 部门位置
)
# 添加部门表的主键约束
alter table dept add constraint pk_dept primary key (deptno);

# 创建员工表
create table emp(
    empno int(4) primary key,# 员工编号
    ename varchar(10),# 员工名字
    job varchar(9),# 员工职位
    mgr int(4),# 上级领导,内容是自身表的empno,但是没有关联
    hiredate date,# 入职时间
    sal double(7,2),# 工资
    comm double(7,2),# 当月补助
    deptno int(2)# 部门编号
);
# 员工表(子表)关联到部门表(主表)
alter table emp add constraint fk_deptno foreign key (deptno) references dept(deptno);

# 创建奖金等级表
create table salgrade(
    grade int primary key,# 等级
    losal double(7,2),# 最低工资
    hisal double(7,2)# 最高工资
);

# 创建奖金表
create table bonus(
    ename varchar(10), # 人名
    job varchar(9),# 职位
    sal double(7,2),# 薪水
    comm double(7,2)# 奖金
);

# 插入数据
insert into dept(deptno,dname,loc) values(10,'accounting','new york'),(20,'research','dallas'),(30,'sales','chicago'),(40,'openations','boston');

insert into emp(empno,ename,job,mgr,hiredate,sal,comm,deptno) 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',7893,'1981-06-09',2450,null,10),
(7788,'scott','analyst',7566,'1987-04-19',3000,null,20),
(7839,'king','president',null,'1981-11-17',5000,null,10),
(7844,'turner','salesman',7698,'1981-09-08',1500,0,30),
(7879,'adams','clerk',7788,'1987-05-23',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);

insert into salgrade(grade,losal,hisal) values(1,700,1200),(2,1201,1400),(3,1401,2000),(4,2001,3000),(5,3001,9999);
  • 查询语句:
    • select * from 表名;# 表示查询表中的所有数据,因为*表示所有的意思。
    • select 列名,列名… from 表名;# 表示查询特定的列的数据。
    • select 列名… from 表名 where 条件;# 表示查询满足条件的行,并且特定的列。当然这里列名写*表示查询全部列。
    • select 列名 as 别名,列名 as 别名,… 表名;# 列名取别名(别名就是换个名字,但是都表示一个东西)。注意这里的别名可以是汉字,并且as可以省略,省略后列名与其对应的别名之间空格分割即可。此外别名可以加双引号,单引号都可以,查询结果不变,但是需要注意,如果别名中有特殊符号的时候(例如空格),这时候就必须要加引号。
    • select 列名+1000 from 表名;# 对查询的结果进行一些算数运算。
      • select 列名+列名 from 表名;# 如果一列是null的话,那么加起来的结果也是null。可以使用ifnull语句进行解决,参考函数部分。
    • select distinct 列名 from 表名;# 去重。
      • select distinct 列名,列名… from 表名;# 是对后面的所有列的组合查询以后进行去重,而不是单独的某一列去重。
    • select * from 表名 order by 列名 (asc/desc);# 按照某一列排序,默认是升序(asc),降序是用(desc)
      • select * from 表名 order by 列名1 (asc/desc), 列名2 (asc/desc);# 按照两列进行排序。列名1排序是主要的,然后列名1中有重复的时候,再按照列名2排序。
  • where子句
    • 关系运算符
      • =:等于号
      • >:大于
      • <:小于
      • >=:大于等于
      • <=:小于等于
      • <>或者!=:不等于
      • 在查询条件中有大小写的时候,默认是不区分大小写的,如果需要区分,则在每个需要区分大小写的条件前面加binary。
      • 关系运算符可以比较日期、字符、数字等都可以。
    • 逻辑运算
      • and或者&&:表示并且
      • or或者||或者in:表示或者,注意in的用法in(x,x,x,x,x,x…)
      • 在使用逻辑运算符的时候,例如,where 工资>1500 and 工资<3000,这时候是(1500,3000),也可以where between 1500 and 3000,这时候是[1500,3000]。
    • 模糊查询
      • like:表示进行模糊查询,模糊查询后面的内容必须加单引号或者双引号,不管查询的列的类型是int还是varchar。
        • %:表示任意多个字符。例如查询带x的,like '%x%'表示只要带x就可以,like 'x%'表示以x开头。
        • _:表示一个字符。例如查询第二个是x的,like ‘_x%’。
    • null的判断
      • is null:表示是空的。例如查询这一列为空的,列名is null
      • is not null:非空的。例如查询这一列不为空的,列名is not null
    • 小括号的使用:就是数学运算中,给and和or添加优先级,也是为了保证程序的可读性。默认情况and的优先级较高。

你可能感兴趣的:(mysql,mysql)