当前位置: 首页 > article >正文

查询数据库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);


 


http://www.kler.cn/a/135163.html

相关文章:

  • Redo与Undo的区别:数据库事务的恢复与撤销机制
  • C++单例模式与多例模式
  • C语言 | Leetcode C语言题解之第556题下一个更大元素III
  • 开发语言中,堆区和栈区的区别
  • 基于碎纸片的拼接复原算法及MATLAB实现
  • 《深度解析 C++中的弱引用(weak reference):打破循环依赖的利器》
  • 不爱的人在一起会幸福吗
  • 网络安全(大厂面试真题集)
  • JOSEF 同步检查继电器 JT-1 额定电压100V 柜内固定安装,板前接线
  • List 函数排序操作,用对方法事半功倍!
  • 【Linux】-进程间通信-命名管道文件(没有关系的进程间进行通信),以及写一个日志模板
  • VSCode打开Json 文件格式化
  • CDN的发展和作用。当前网站被攻击适用什么样的CDN。
  • websocket详解
  • 一图多码如何分解?快速做二维码解码的方法
  • 2023 年最新 MySQL 数据库 Windows 本地安装、Centos 服务器安装详细教程
  • 若依ruoyi框架增加2个以上的数据源配置
  • Vue3-shallowRef 和 shallowReactive函数(浅层次的响应式)
  • uC/OS-Il---多级中断机制
  • Linux shell编程学习笔记26:stty(set tty)
  • 头歌 MySQL数据库 - 初识MySQL
  • 这个技术也能管理教学质量,厉害了!
  • 什么是静态代理、JDK动态代理、cglib动态代理?
  • SpringBoot2—运维实用篇
  • Java 两个整数int类型相除总是得0的原因及解决方法
  • vmware workstation pro 17.5 安装 macos 13.5.2 虚拟机超详细图文教程