查询数据库DQL

 DQL 查询基本语法

--  ======================DQL :基本语法==================;
-- 1查询指定的字段 name  entrydate  并返回
 select name , entrydate from tb_emp;
  -- 2 查询 所有字段  并返回
  select id, username, password, name, gender, image, job, entrydate, create_time, update_time from  tb_emp;
    -- 2 查询 所有字段  并返回
    select * from  tb_emp;
-- 3 查询 所有员工的 name entrydate 并起别名(姓名 入职日期)
select name as'姓名' , entrydate as'入职日期' from  tb_emp;
-- 缩写
select name '姓 名' , entrydate '入职日期' from  tb_emp;

-- 查询已有的员工关联了那几种职位(不要重复)
select  distinct job from tb_emp

DQL 条件查询

-- ===============DQL:条件查询 ======================
  -- 1查询  姓名为  杨逍的 员工
   select * from tb_emp where name = '杨逍';

--  2查询 id 小于5的 员工消息
select * from tb_emp where  id<5;

 -- 3查询 没有分配职位的员工的信息
  select * from tb_emp where  job is null;

  -- 4查询 有职位的 员工信息
  select * from tb_emp where  job  is not null ;
  -- 5查询 密码不等于 "123456" 的员工 信息
  select * from tb_emp  where password != 123456;
                --  一样
    select * from tb_emp  where password <> 123456;
  -- 6 查询 入职日期 2000-01 -01 (包含)到 '2000-01-01'之间的员工信息
  select * from tb_emp where  entrydate >= '2000-01-01' and entrydate<='2010-01-01';
               -- 缩写
  select * from tb_emp where  entrydate between '2000-01-01' and '2010-01-01';

-- 7 查询 入职日期 2000-01 -01 (包含)到 '2000-01-01' 之间 且 性别是女的员工信息
select * from tb_emp where  entrydate between '2000-01-01' and '2010-01-01' and  gender=2;
                        -- 一样
select * from tb_emp where  entrydate between '2000-01-01' and '2010-01-01' &&  gender=2;

-- 8  查询 职位是2 (讲师) 3 (学工主管) 4 (教研) 员工信息
  select  * from tb_emp  where  job=2 or job=3 or job =4 ;
                    -- 一样
  select  * from tb_emp  where  job in (2,3,4) ;
  select  * from tb_emp  where  job in (4) ;

    -- 9 查询 姓名 为两字的员工信息
    select * from  tb_emp where name like '____';
    select * from  tb_emp where name like '__';

     -- 10 查询 性名 '张' 的员工
     select  * from  tb_emp where  name like '张%';

 DQL分组查询  group by

-- =================DQL :分组查询 ======================
 -- 集合 函数
-- 1 统计该企业的员工信息 --count
    -- A  count 字段
    select count(id) from tb_emp;
    select count(name) from tb_emp;
    select count(job) from tb_emp;

    -- B count (常量)
    select count(0) from tb_emp;

    -- C count (count *)
    select  count(*) from tb_emp;

    -- 2 统计该企业最早入职的员工 --min
    select  min(entrydate) from tb_emp;

     -- 3 统计该企业的最迟入职的员工 -- max
     select max(entrydate)from tb_emp;

    -- 4 统计该企业的 id 平均 值 - avg
    select avg(id) from tb_emp;
    -- 5 统计该企业的 员工的ID 之和 - sum
    select sum(id) from tb_emp;

分组查询 高级

 -- ============DQL:分组 查询 ===============

 -- 1   根据性别分组  统计男性 和女性员工的数量
    select gender , count(*) from tb_emp group by  gender;
  -- 2 先查询 入职日期 在 2015-01-10(包含 ) 以前的 员工  并对结果根据 职位分组  获取员工数量 大=大于等于2的职位
    select job , count(*) from tb_emp  where   entrydate <= '2015-01-10' group by  job having  count(*)>=2;

DQL排序查询 

 -- ================排序查询=========
 -- 1 根据入职日期 对员工 进行升序排序 --asc
 select * from tb_emp order by  entrydate asc;
 select * from tb_emp order by  entrydate ;
 -- 2 根据 入职日期   对员工进行降序排序
 select * from tb_emp order by entrydate desc;
  -- 3 根据 入职日期 对公司员工进行 升序排序 入职时间相同的 再按照 更新时间 进行降序排序
select * from tb_emp order by  entrydate ,update_time desc ;

DQL 分页查询  limit

 -- =================分页查询 ===============;
 -- 1 从 起始索引0 开始查询员工数据  每页展示5 条记录
 select * from tb_emp   limit 0,5;

 -- 2 查询第1页 员工数据  每页展示5条记录
 select * from tb_emp   limit 0,5;
 -- 3 查询第2页 员工数据  每页展示5条记录
select * from tb_emp   limit 5,5;
 -- 4 查询第3页 员工数据  每页展示5条记录
select * from tb_emp   limit 10,5 ;

-- 起始索引 =(页码 -1 *  每页展示的记录数 )
-- 起始索引 =(页码 -1 *  5 )



-- 案例 1 按照需求完成 员工管理 的条件分页 查询 - 根据 输入条件 查询第一页的数据 每一页展示 10条数据
-- 输入 条件
-- 姓名 :张
-- 性别 :男
-- 入职时间 : 2000-01-01 2015-12-31
select * from tb_emp where name like '%张%' and gender = 1 and entrydate between
'2000-01-01' and '2015-12-31'order by update_time desc limit 10,10;


-- 案例 2-1 :根据需求 完成员工职位信息的统计 count(*) if判断
select if (gender=1,'男性','女性')'性别', gender, count(*) from tb_emp group by gender ;

-- 2-2 根据需求 完成员工职位信息的统计 -- case

select job,count(*) from tb_emp group by job;
-- case job when 1 then'老师' hen 1 then'老师'hen 1 then'老师'

select job ,
(case job when 1 then '班主任' when 2 then '讲师' when 3 then '学工主管
' when 4 then '教研主管' else '未分配职位'end ) '职位',
count(*) from tb_emp group by job ;

多表设计 

  1. 一对多

  2. 一对一 

  3. 多对多 

1.一对多 

create table tb_emp
(
    id          int auto_increment comment '主键ID'
        primary key,
    username    varchar(20)                  not null comment '用户名',
    password    varchar(32) default '123456' null comment '密码',
    name        varchar(10)                  not null comment '姓名',
    gender      tinyint unsigned             null comment '性别 1男 2女',
    image       varchar(300)                 null comment '图形url',
    job         tinyint unsigned             null comment '职位 ,1班主任,2 讲师 ,3 学工主管 ,4 教研主管 ',
    entrydate   date                         null comment '入职日期',

    dept_id int unsigned comment '归属部门',
    crete_time  datetime                     not null comment '创建时间',
    update_time datetime                     not null comment '修改时间',
    constraint username
        unique (username)
)
    comment '员工';

-- 部门管理
   -- create  database  db_03;
  --  use db_03;
create  table  tb_dpt(

        id  int unsigned primary key  auto_increment comment 'ID',
        name varchar(10) not null  unique  comment '部门名称',
        creation_time datetime not null comment '创建时间',
        update_time datetime not null comment '修改时间'


)comment '部门表';

alter table tb_emp  -- (用户表)
    add constraint tb_emp_fk_dept_id  -- 外连接名称
        foreign key (dept_id) references  -- 外连接创建表
            tb_dpt (id);   -- (部门表·)

2.一对一

create table  tb_user(
    id int unsigned primary key  auto_increment comment 'Id',
    name varchar(20) not null  comment '姓名',
    gender tinyint unsigned   not null comment '性别 1:女 2:男',
    phone char(11)comment '手机号',
    degree varchar (15) comment '学历'
  ) comment '用户表';
insert into tb_user values (1,'买买提',1,'18383905487','本科'), (2,'张小',1,'67124808247','大专'),
                           (3,'李强',1,'18383905487','博士'), (4,'李方',2,'18383905487','初中') ;
create  table tb_user_card(
    id int unsigned primary key auto_increment comment 'id',
    ethnic_group varchar(10) not null  comment '民族',
    birthday date not null comment '生日',
    idcard char(18) not null comment '身份证号',
    issued varchar(20) not null comment '签发机关',
    expire_begin date comment '有效期限-开始时',
    expire_end date comment '有效期限-结束',
    user_id int unsigned not null unique comment '用户ID',
    constraint  fk_user_id foreign key (user_id) references tb_user(id)
)comment '用户信息表';

insert into tb_user_card values
                             (1,'汉','1998-08-14','453234199808147439','南京鼓励广场','2000-12-1',null,1),
                             (2,'汉','1998-08-14','453234199808147439','南京鼓励广场','2000-12-1','2023-12-31',2),
                             (3,'汉','1998-08-14','453234199808147439','南京鼓励广场','2000-12-1','2028-10-30',3),
                             (4,'回','1998-08-14','453234199808147439','南京鼓励广场','2000-12-1',null,4)

多对多 

-- 多对多
-- 学生表
create table  tb_student(
    id int auto_increment primary key comment '主键ID',
    name varchar(10)comment '姓名',
    no varchar(10)comment '学号'
)comment '学生表';
insert into tb_student(name, no) values ('person1','20001'),('person2','20002'),('person3','20003'),('person4','20004');

create table tb_course(
    id int auto_increment primary key comment '主键id',
    name varchar(10) comment '课程名称'

)comment '课程表' ;
insert into tb_course(name) values ('java'),('php'),('mysql'),('go'),('c'),('linux');


create table  tb_student_course(
    id int unsigned auto_increment comment '主键' primary key ,
    student_id int not null comment '学生id',
    course_id int not null comment '课程id',
    constraint fk_courseid foreign key (course_id)references tb_course(id) ,
    constraint fk_studentid foreign key (student_id)references tb_student(id)

)comment '学生和课程表';

insert into tb_student_course (student_id, course_id)values (1,1),(1,2),(1,3),(2,2),(2,3),(3,3);


 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值