2019-04-24-day039-数据库的增查
内容回顾
- 多积累使用工具的经验
- 尽量多练习
- 1.多练几种类型
- 2.不要照着写好的sql敲,要自己组织语言
内容回顾
存储引擎
- innodb : 外键 行级锁(并发修改) 事务(客户管理系统)
- myisam : 表级锁 不支持外键\事务\行级锁
- memory : 只能在内存中存储数据 重启server数据丢失
mysql中的基础数据类型
- 数字
- int id/age/部门编号
- float(8,2) salary
- 字符串
- char 定长 越是长度固定char越节省空间 读写速度快
* 名字 部门名 - varchar 变长 越是长度不固定varchar越节省空间 读写速度慢
* 部门描述
- char 定长 越是长度固定char越节省空间 读写速度快
- 时间
- year
- date 入职日期 离职 开学 毕业
- time
- datetime 出生日期 交易记录 打卡时间
- timestamp
- enum 和 set
- enum 单选
- enum('male','female')
- set 多选(去重)
- enum 单选
完整性约束
- id int unsigned
- id int default 0
- id int not null
- id int unique
- auto_increment 相当于非空+自增且只能用于整数类型
- id int unique auto_increment
- id int primary key auto_increment
- 非空 + 唯一
- id int unique not null 如果没有主键,第一个设置非空唯一的就是主键
- 联合唯一
- id int,
- name char(12),
- unique(id,name)
- primary key 主键 一张表只能有一个主键
- id int primary key
- foreign key 外键
- id int,
- name char(12),
- tid int,
- foreign key(tid) references 外表(字段名) on update cascade on delete cascade
表的操作
- 创建表
- create table 表名(
- 字段名 类型(长度约束) 其他约束,
- 字段名 类型(长度约束) 其他约束,
- 字段名 类型(长度约束) 其他约束);
- 删除表
- drop table 表名
- 修改表
- alter table 表名 rename 新表名;
- add 新字段 类型(长度约束) 其他约束 first;
- drop 字段 ;
- modify 原字段名 新类型(新长度) 新约束 after 某字段;
- change 原字段名 新字段名 新类型(新长度) 新约束;
- 查看表结构
- desc 表名 == describe 表名
- show create table 表名; 查看详细表结构,存储引擎 编码 更复杂的约束条件
默写
- 员工id 姓名 性别 年龄 入职日期 部门 部门描述 部门编号 薪资
create table staff(
id int primary key auto_increment,
name char(12) not null
sex enum('male','female') default 'male',
age int,
hire_date date,
post_name char(12),
post_comment varchar(255),
post_id int,
salary float(8,2) unique
);
- 拆分表
create table post(
post_id int primary key auto_increment,
post_name char(12),
post_comment varchar(255)
)
create table staff(
id int primary key auto_increment,
name char(12) not null
sex enum('male','female') default 'male',
age int,
hire_date date,
salary float(8,2) unique
post_id int,
foreign key(post_id) references post(post_id)
);
今日内容
数据操作
- 增
- 删
- 改
- 查
- 单表查询
- 多表查询
增删改查
增加数据
id name age sex
insert into 表名 value (1,'alex',83,'不详');
insert into 表名 values (1,'alex',83,'不详'),
* (2,'太白',40,'male');
insert into 表名 (id,name) values(3,'宝元');
了解
* insert into 表名 select * from 另一张表;
* insert into 表名 select 字段1,字段2 from 另一张表;
* insert into 表名(字段1,字段2) select 字段1,字段2 from 另一张表;
删除数据
delete from 表名 where id=3
更新数据
update 表名 set 字段名=新的值 where age>20
单表查询
简单查询
- select 字段名 from 表名
- select 字段名,字段名... from 表名
- select * from 表
去重 distinct
- select distince 某个字段 from 表 * 对某个字段去重
- 对筛选的结果进行四则运算
- select 字段*12 from 表
- 在显示查询结果的时候临时重命名
- select 字段名 新名字 from 表;
- select 字段名 as 新名字 from 表;
concat函数
- concat('你想拼接的内容',字段名,'你想拼的其他内容','字段名')
- concat_ws('连接符号',字段1,字段2,....)
case语句
SELECT
(case
when emp_name = 'jingliyang' then
emp_name
when emp_name = 'alex' then
concat(emp_name,'_bigsb')
else
concat(emp_name,'_sb')
end) as new_name
FROM employee;
where条件
- select 字段 from 表 where 条件
- 比较运算符 > < >= <= <> !=
- 范围(范围更大) between a and b 查询a,b之间的所有内容
- 范围(范围更精准) in (a,b,c) 查询值为a或者b或者c的所有内容
like
- select * from 表 where emp_name like '金%'
- %是一个通配符,表示任意长度的任意內容
- select * from 表 where emp_name like '金三_'
- _也是一个通配符,表示一个长度的任意内容
逻辑运算符 and or not
身份运算符 is null/ is not null
- emp_name is null
正则匹配
- 所有人的身份证号,匹配所有身份证号是15位的居民 \d{15}$
select 字段 from 表 where age regex '\d{15}$';
- 查看岗位是teacher的员工姓名、年龄
- 查看岗位是teacher且年龄大于30岁的员工姓名、年龄
- 查看岗位是teacher且薪资在9000-10000范围内的员工姓名、年龄、薪资
select emp_name,age,salary from employee where salary between 9000 and 10000
- 查看岗位描述不为NULL的员工信息
- where post_comment is not null
- 查看岗位是teacher且薪资是10000或9000或30000的员工姓名、年龄、薪资
- 查看岗位是teacher且薪资不是10000或9000或30000的员工姓名、年龄、薪资
where salary !=10000 and salary !=9000 and salary !=30000
where salary not in (10000,9000,30000)
- 查看岗位是teacher且名字是jin开头的员工姓名、年薪
python
select emp_name,salary*12 as annul_year from employee where post='teacher' and emp_name like 'jin%'
group by
- 分组
- 根据分组的字段自动的做去重
- 其他重复的项目都不会在结果中显示
- 但是可以使用count来计算每个组中的项,也可以使用group_concat来查看组内的名字
having 总是和group by 连用,where中不能出现聚合函数,所以和聚合函数有关的条件筛选也只能用having
- 对分组进行条件过滤
查询各岗位内包含的员工个数小于2的岗位名、岗位内包含员工名字、个数
- 查各个岗位的员工个数
select post,count(id) from employee group by post having count(id) <2
总是对分组之后的结果进行一个条件筛选的时候用having
- 查各个岗位的员工个数
查询各岗位平均薪资大于10000的岗位名、平均工资
select post,avg(salary) from employee group by post having avg(salary) > 10000查询各岗位平均薪资大于10000且小于20000的岗位名、平均工资
select post, avg(salary) from employee group by post
having avg(salary) > 10000 and avg(salary) < 20000;
order by
- 默认从小到大排序 升序
- 从大到小排序 desc 降序
先按年龄升序排,当年龄相同的时候,工资低的排前面
查询各岗位平均薪资大于10000的岗位名、平均工资,结果按平均薪资升序排列
select post,avg(salary) as avg_salary from employee group by post having avg(salary)>10000 order by avg_salary
limit 取前n个或者web开发中做分页功能
- 显示前n条 limit n
- 从第m+1条开始,显示n条 limit m,n
- 从第m+1条开始,显示n条 limit n offset m
select distinct 字段 from 表 where 条件 group by 分组 having 过滤条件 order by 排序 limit n;
sql的解析顺序
2019-04-24-day039-数据库的增查的更多相关文章
- MySql+Socket 完成数据库的增查Demo
需求: 利用MySql数据库结合前端技术完成用户的注册(要求不使用Web服务技术),所以 Demo采用Socket技术实现Web通信. 第一部分:数据库创建 数据库采用mysql 5.7.18, 数据 ...
- [译]聊聊C#中的泛型的使用(新手勿入) Seaching TreeVIew WPF 可编辑树Ztree的使用(包括对后台数据库的增删改查) 字段和属性的区别 C# 遍历Dictionary并修改其中的Value 学习笔记——异步 程序员常说的「哈希表」是个什么鬼?
[译]聊聊C#中的泛型的使用(新手勿入) 写在前面 今天忙里偷闲在浏览外文的时候看到一篇讲C#中泛型的使用的文章,因此加上本人的理解以及四级没过的英语水平斗胆给大伙进行了翻译,当然在翻译的过程中发 ...
- java jdbc 连接mysql数据库 实现增删改查
好久没有写博文了,写个简单的东西热热身,分享给大家. jdbc相信大家都不陌生,只要是个搞java的,最初接触j2ee的时候都是要学习这么个东西的,谁叫程序得和数据库打交道呢!而jdbc就是和数据库打 ...
- MySQL数据库学习笔记(十二)----开源工具DbUtils的使用(数据库的增删改查)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- 开源工具DbUtils的使用(数据库的增删改查)
开源工具DbUtils的使用(数据库的增删改查) 一.DbUtils简介: DBUtils是apache下的一个小巧的JDBC轻量级封装的工具包,其最核心的特性是结果集的封装,可以直接将查询出来的结果 ...
- DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类)
DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类) 一.DAO模式简介 DAO即Data Access Object,数据访问接口.数据访问:故名思义就是与数据库打交道.夹在业务逻辑与数据 ...
- IOS数据库FMDB增、删、改、查的使用【原创】
http://blog.it985.com/13588.html IOS数据库FMDB增.删.改.查的使用[原创] FMDB是一个XCODE的中一个轻量级的数据库,用于将网络资源存储在本地.所以,FM ...
- Django基础学习四_数据库的增删改查
今天主要学习两个东西 1.如何对数据库做增删改查 2.如果将数据库中的数据用html的方式返回到前台 一.对数据库中增删改查操作 1.首先需要先见表,见表的方法我们在“http://www.cnblo ...
- python链接oracle数据库以及数据库的增删改查实例
初次使用python链接oracle,所以想记录下我遇到的问题,便于向我这样初次尝试的朋友能够快速的配置好环境进入开发环节. 1.首先,python链接oracle数据库需要配置好环境. 我的相关环境 ...
- java:JSP(JSPWeb.xml的配置,动态和静态导入JSP文件,重定项和请求转发,使用JSP实现数据库的增删改查实例)
1.JSP的配置: <%@ page language="java" import="java.util.*" pageEncoding="UT ...
随机推荐
- C语言实验一(1)
#include<stdio.h>int main(){ int a,b,sum; a=123; b=456; sum=a+b; printf("sum is %d\n" ...
- URL组成部分详解
URL组成部分详解 URL是Uniform Resource Locator的简写,统一资源定位符. 一个URL是由以下几部分组成的: scheme://host:port/path/?query-s ...
- java Comparable and Comparator
1.Comparable简介 此接口对实现它的每个类的对象强加一个总排序.这种排序被称为类的自然排序,类的compareTo方法被称为其自然比较方法.可以通过 Collections.sort(和Ar ...
- HDU 3月ACM模拟赛T10 COUNT
题面 //来自TKJ的友好提供 ^_^ 然后我又被卡了半天不知道怎么转移N3 于是听CWY给我讲 终于会了 (虽然他讲的不是很清楚QAQ 但是凭着我们之间根本不存在的默契竟然达成了心智联通) 重点在于 ...
- java Data、String、Long三种日期类型之间的相互转换
java Data.String.Long三种日期类型之间的相互转换 // date类型转换为String类型 // formatType格式为yyyy-MM-dd HH:mm:ss// ...
- MVC,MVP和MVVM三种开发模式
MVC: mvc模式:意思是软件可分为三部分: 视图(View):用户页面 控制器(Controller):控制器 模型(Model):模型 通讯方式: 1.View 传送指令到Controller ...
- .net实现网易云音乐下载
客户端版的网易云音乐下载是需要vip的,网页版的虽然可以通过调试工具找到下载链接,但是用起来不是很方便,通过调试工具观察请求发现请求参数都是加密的,比如搜索歌曲的请求参数: 这个加密的实现肯定是写在j ...
- 对redux的粗略理解
redux是一个js库,用于前端应用的状态管理,但是在一个较小的项目中,即一个并不需要太多交互的项目中完全可以不用redux,非要使用的话反而增加了项目的复杂度. 关于redux就是状态与数据一一对应 ...
- kafka已生产消息查看
在测试过程中有用到kafka,由于开发说我往kafka里面生产了消息,通知了对方要消费....看到这块一头雾水 kafka主要2个功能生产和消费 ##查询topic列表 ./kafka-topics. ...
- Django的url控制器
一 url配置 Django 1.11版本 URLConf官方文档 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表.也就是ur ...