数据库理论与实践(二)

本次文章主要记录和分享的是数据库查询语言,这是我们日常最常用的语言。会分享一个数据库搭建的例子cdb,该数据库文件可用于我之前创建的Springboot项目中。

DQL(数据查询语言)

DQL: 数据查询语言,用来 查询 数据库中表的记录

语法例子:

SELECT
	字段列表
FROM
	表名字段
WHERE
	条件列表
GROUP BY
	分组字段列表
HAVING
	分组后的条件列表
ORDER BY
	排序字段列表
LIMIT
	分页参数

上述语法再DQL 执行顺序:

FROM -> WHERE -> GROUP BY -> HAVING ->SELECT -> ORDER BY -> LIMIT

基础查询

查询多个字段:

SELECT 字段1, 字段2, 字段3, ... FROM 表名;
SELECT * FROM 表名;

查询并设置别名:

SELECT 字段1 [ AS 别名1 ], 字段2 [ AS 别名2 ], 字段3 [ AS 别名3 ], ... FROM 表名;
SELECT 字段1 [ 别名1 ], 字段2 [ 别名2 ], 字段3 [ 别名3 ], ... FROM 表名;

去除重复记录(去重):

SELECT DISTINCT 字段列表 FROM 表名;

条件查询

条件:

 语法例子:

-- 从员工表里找出年龄在20到30之间
select * from employee where age between 20 and 30;
select * from employee where age >= 20 and age <= 30;

聚合查询(聚合函数)

常见聚合函数:

语法例子:

SELECT count(id) from employee where workaddress = "广东省";

分组查询

语法例子:

SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1, 字段2 排序方式2;

排序查询

语法例子:

-- 根据年龄升序排序
SELECT * FROM employee ORDER BY age ASC;
SELECT * FROM employee ORDER BY age;
-- 两字段排序,根据年龄升序排序,入职时间降序排序
SELECT * FROM employee ORDER BY age ASC, entrydate DESC;

分页查询

语法例子:

-- 查询第一页数据,展示10条
SELECT * FROM employee LIMIT 0, 10;
-- 查询第二页
SELECT * FROM employee LIMIT 10, 10;

cdb案例

首先要明确我们的系统项目需要提供什么样的服务,我计划设计的是一个用于社区人员车辆维护的系统,项目里我想通过对不同的角色展示不同的菜单页面,那么这个系统会产生“车辆、用户、角色、菜单、服务记录以及员工请假”这类的实体。确定实体后再确定每个实体的属性。

依次执行代码:

<----创建用户列表
CREATE TABLE `c_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(50) NOT NULL,
  `password` varchar(100) DEFAULT NULL,
  `email` varchar(50) DEFAULT NULL,
  `phone` varchar(20) DEFAULT NULL,
  `status` int(1) DEFAULT NULL,
  `avatar` varchar(200) DEFAULT NULL,
  `gender` varchar(8) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

<----创建角色列表
CREATE TABLE `c_role` (
  `role_id` int(11) NOT NULL AUTO_INCREMENT,
  `role_name` varchar(50) DEFAULT NULL,
  `role_desc` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`role_id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4;

<----创建菜单列表
CREATE TABLE `c_menu` (
  `menu_id` int(11) NOT NULL AUTO_INCREMENT,
  `component` varchar(100) DEFAULT NULL,
  `path` varchar(100) DEFAULT NULL,
  `redirect` varchar(100) DEFAULT NULL,
  `name` varchar(100) DEFAULT NULL,
  `title` varchar(100) DEFAULT NULL,
  `icon` varchar(100) DEFAULT NULL,
  `parent_id` int(11) DEFAULT NULL,
  `is_leaf` varchar(1) DEFAULT NULL,
  `hidden` tinyint(1) DEFAULT NULL,
  PRIMARY KEY (`menu_id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb4;

<----创建服务记录列表
CREATE TABLE `c_menu` (
  `sever_id` int(11) NOT NULL AUTO_INCREMENT,
  `id` int(11) DEFAULT NULL,
  `car_id` int(11) DEFAULT NULL,
  `sever_desc` varchar(100) DEFAULT NULL,
  `sever_time` varchar(100) DEFAULT NULL,
  `sever_fee` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`sever_id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb4;

<----创建车辆列表
CREATE TABLE `c_car` (
  `car_id` int(11) NOT NULL AUTO_INCREMENT,
  `id` int(11) DEFAULT NULL,
  `car_brand` varchar(50) DEFAULT NULL,
  `car_time` varchar(100) DEFAULT NULL,
  `status` int(1) DEFAULT NULL,
  PRIMARY KEY (`car_id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4;

<----创建请销假列表
CREATE TABLE `c_leave` (
  `leave_id` int(11) NOT NULL AUTO_INCREMENT,
  `leave_time` varchar(100) DEFAULT NULL,
  `leave_res` varchar(100) DEFAULT NULL,
  `id` int(11) DEFAULT NULL,
  PRIMARY KEY (`leave_id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb4;

<----创建用户角色映射表
CREATE TABLE `c_user_role` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) DEFAULT NULL,
  `role_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4;

<----创建角色菜单映射表
CREATE TABLE `x_role_menu` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `role_id` int(11) DEFAULT NULL,
  `menu_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4;

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值