内容回顾

  1. 多积累使用工具的经验
  2. 尽量多练习
    • 1.多练几种类型
    • 2.不要照着写好的sql敲,要自己组织语言

内容回顾

存储引擎

  • innodb : 外键 行级锁(并发修改) 事务(客户管理系统)
  • myisam : 表级锁 不支持外键\事务\行级锁
  • memory : 只能在内存中存储数据 重启server数据丢失

mysql中的基础数据类型

  • 数字

    • int id/age/部门编号
    • float(8,2) salary
  • 字符串
    • char 定长 越是长度固定char越节省空间 读写速度快
      * 名字 部门名
    • varchar 变长 越是长度不固定varchar越节省空间 读写速度慢
      * 部门描述
  • 时间
    • year
    • date 入职日期 离职 开学 毕业
    • time
    • datetime 出生日期 交易记录 打卡时间
    • timestamp
  • enum 和 set
    • enum 单选

      • enum('male','female')
    • set 多选(去重)

完整性约束

  • 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}$';

  1. 查看岗位是teacher的员工姓名、年龄
  2. 查看岗位是teacher且年龄大于30岁的员工姓名、年龄
  3. 查看岗位是teacher且薪资在9000-10000范围内的员工姓名、年龄、薪资
select emp_name,age,salary  from employee where salary between 9000 and 10000
  1. 查看岗位描述不为NULL的员工信息

    • where post_comment is not null
  2. 查看岗位是teacher且薪资是10000或9000或30000的员工姓名、年龄、薪资
  3. 查看岗位是teacher且薪资不是10000或9000或30000的员工姓名、年龄、薪资
where salary !=10000 and salary !=9000 and salary !=30000
where salary not in (10000,9000,30000)
  1. 查看岗位是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
  1. 查询各岗位平均薪资大于10000的岗位名、平均工资
    select post,avg(salary) from employee group by post having avg(salary) > 10000

  2. 查询各岗位平均薪资大于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-数据库的增查的更多相关文章

  1. MySql+Socket 完成数据库的增查Demo

    需求: 利用MySql数据库结合前端技术完成用户的注册(要求不使用Web服务技术),所以 Demo采用Socket技术实现Web通信. 第一部分:数据库创建 数据库采用mysql 5.7.18, 数据 ...

  2. [译]聊聊C#中的泛型的使用(新手勿入) Seaching TreeVIew WPF 可编辑树Ztree的使用(包括对后台数据库的增删改查) 字段和属性的区别 C# 遍历Dictionary并修改其中的Value 学习笔记——异步 程序员常说的「哈希表」是个什么鬼?

    [译]聊聊C#中的泛型的使用(新手勿入)   写在前面 今天忙里偷闲在浏览外文的时候看到一篇讲C#中泛型的使用的文章,因此加上本人的理解以及四级没过的英语水平斗胆给大伙进行了翻译,当然在翻译的过程中发 ...

  3. java jdbc 连接mysql数据库 实现增删改查

    好久没有写博文了,写个简单的东西热热身,分享给大家. jdbc相信大家都不陌生,只要是个搞java的,最初接触j2ee的时候都是要学习这么个东西的,谁叫程序得和数据库打交道呢!而jdbc就是和数据库打 ...

  4. MySQL数据库学习笔记(十二)----开源工具DbUtils的使用(数据库的增删改查)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  5. 开源工具DbUtils的使用(数据库的增删改查)

    开源工具DbUtils的使用(数据库的增删改查) 一.DbUtils简介: DBUtils是apache下的一个小巧的JDBC轻量级封装的工具包,其最核心的特性是结果集的封装,可以直接将查询出来的结果 ...

  6. DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类)

    DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类) 一.DAO模式简介 DAO即Data Access Object,数据访问接口.数据访问:故名思义就是与数据库打交道.夹在业务逻辑与数据 ...

  7. IOS数据库FMDB增、删、改、查的使用【原创】

    http://blog.it985.com/13588.html IOS数据库FMDB增.删.改.查的使用[原创] FMDB是一个XCODE的中一个轻量级的数据库,用于将网络资源存储在本地.所以,FM ...

  8. Django基础学习四_数据库的增删改查

    今天主要学习两个东西 1.如何对数据库做增删改查 2.如果将数据库中的数据用html的方式返回到前台 一.对数据库中增删改查操作 1.首先需要先见表,见表的方法我们在“http://www.cnblo ...

  9. python链接oracle数据库以及数据库的增删改查实例

    初次使用python链接oracle,所以想记录下我遇到的问题,便于向我这样初次尝试的朋友能够快速的配置好环境进入开发环节. 1.首先,python链接oracle数据库需要配置好环境. 我的相关环境 ...

  10. java:JSP(JSPWeb.xml的配置,动态和静态导入JSP文件,重定项和请求转发,使用JSP实现数据库的增删改查实例)

    1.JSP的配置: <%@ page language="java" import="java.util.*" pageEncoding="UT ...

随机推荐

  1. QMessageBox对话框

    infoBox = QMessageBox() infoBox.setIcon(QMessageBox.Question) infoBox.setWindowTitle("初始化失败&quo ...

  2. HTML中的置换元素和非置换元素

    我们都知道,行内元素不能够定义宽度和高度,但 img,input,button等标签作为行内元素却可以定义宽高,为什么呢?这就牵扯到了置换元素和非置换元素. 置换元素: w3c官方解释:“An ele ...

  3. day 04 list,元祖

    1,作业讲解 # s = '132a4b5c' # s1 = s[0]+s[2]+s[1] # print(s1) index = 0 # while 1: # print(s[index]) # i ...

  4. 版本控制,django缓存,跨域问题解决

    复习 分页: 1. 简单分页 2. 偏移分页 3. 加密分页 解析器:客户处理前端提交来的数据 urlencode: body体中的数据格式: key=value& formdata编码:为区 ...

  5. Angular2 之父子组件交互方式

    父子组件交互方式,这里介绍主要的三种方式 1.事件传值 下面以列表页和分页组件举例. list.component.html <pagination *ngIf="pageParams ...

  6. Linux c使用gumbo库解析页面表单信息(三)

    前面说了那么多,终于说到如何解析html表单信息了. 什么是表单信息呢,这里我们先要有一些概念: 如上图,这是一个QQ注册页面,注册页面当中需要我们填的空其实就是一个表单信息. 具体到html代码当中 ...

  7. Delphi下 Winsock 函数

    用于初始化Winsock[声明]int WSAStarup(WORD wVersionRequested,LPWSADATA lpWSAData);[参数]wVersionRequested - 要求 ...

  8. C#总结小程序

    主要功能 左侧树状图功能 添加,修改,删除 1.添加 点击添加按钮执行点击事件 弹出机窗口之后点击添加 2.删除 点击删除执行下面的单击事件 点击确定即可删除成功. 3.修改

  9. bzoj1668

    题解: 简单dp 注意最后往后面多取几个 求个最小值 代码: #include<bits/stdc++.h> using namespace std; ; int n,m,f[N],a[N ...

  10. result type

    <result-types> <result-type name="chain" class="com.opensymphony.xwork2.Acti ...