数据库 II

数据库 II

1.中文问题:

在这里插入图片描述

 错误原因是客户端和MySQL之间编解码字符集不一致导致的
 解决方案: 修改MySQL的解码字符集为gbk
set names gbk;
在这里插入图片描述

  1. 查询数据
     格式: select 字段信息 from 表名 where 条件;
     举例:
    insert into person values(‘刘备’,40),(‘关羽’,30),(‘悟空’,20),(‘八戒’,10),(‘张学友’,5);
     select name from person;
     select name,age from person;
     select * from person;
     select * from person where age=50;
     select age from person where name=“悟空”;

  2. 修改数据
     格式: update 表名 set 字段名=值 where 条件;
     举例:
     update person set age=88 where name=‘刘备’;
     update person set name=‘张飞’,age=18 where name=‘关羽’;
     update person set name=‘黎明’ where age=5;

  3. 删除数据
     格式: delete from 表名 where 条件;
     举例:
     delete from person where name=‘张飞’;
     delete from person where age<30;
     delete from person;

2.主键约束

主键: 表示数据唯一性的字段称为主键
约束: 创建表时给表字段添加的限制条件
主键约束: 限制主键的值 唯一且非空

 如何使用:
 use day2db;
create table t1 (id int primary key,name varchar(50))charset=utf8;
 insert into t1 values(1,“aaa”);
 insert into t1 values(1,“bbb”); //报错 主键值重复
 insert into t1 values(null,“ccc”);

3.主键约束+自增

 自增规则: 从历史最大值基础上+1
 如何使用: create table t2(id int primary key auto_increment,name varchar(50))charset=utf8;
 insert into t2 values(null,“aaa”);
 insert into t2 values(null,“bbb”);
 insert into t2 values(10,“ccc”);
 insert into t2 values(null,“ddd”);
 delete from t2 where id>=10;
 insert into t2 values(null,“eee”);

4.SQL语句分类

DDL: 数据定义语言,包括数据库相关和表相关的SQL语句
DML: 数据操作语言, 包括增删改查
DQL: 数据查询语言, 只包含select查询相关的SQL语句
TCL: 事务控制语言
DCL: 数据控制语言

5.数据类型

  1. 整数: int(m)和bigint(m) m代表显示长度, m=5 存18 查询得到00018
    create table t3(age int(5) zerofill);
    insert into t3 values(18);
    select * from t3;

  2. 浮点数: double(m,d) m代表总长度,d代表小数长度 , 存23.212 m=5 d=3
    create table t5(price double(5,3));
    insert into t5 values(23.32123);
    insert into t5 values(233.32123); //报错

  3. 字符串:
    a. char(m), 固定长度, m=10 存abc 占10, 执行效率略高, 当保存数据的长度相对固定时使用, 最大值255
    b. varchar(m),可变长度,m=10 存abc 占3,更节省空间, 最大值65535 但推荐保存短的数据(255以内)
    c. text(m),可变长度, 最大值65535,建议保存长度大于255的

  4. 日期:
    a. date, 只能保存年月日
    b. time, 只能保存时分秒
    c. datetime, 保存年月日时分秒, 默认值为null , 最大值 9999-12-31
    d. timestamp(时间戳,距离1970年1月1日的毫秒数),保存年月日时分秒,默认值为当前系统时间,最大值 2038-1-19
    create table t6(t1 date,t2 time,t3 datetime,t4 timestamp);
    insert into t6 values(“2022-5-15”,null,null,null);
    insert into t6 values(null,“14:20:25”,“2011-10-22 10:20:30”,null);

6.导入*.sql批处理文件

  1. 在某一个目录下放置XXX.sql文件
  2. 在客户端中 执行 source 目录路径/XXX.sql;
  3. 执行以下SQL语句 检查是否成功

7.去重distinct

  1. 查询员工表中所有不同的工作
    select distinct job from emp;
  2. 查询员工表中出现了哪几个不同的部门id?
    select distinct dept_id from emp;

8.is null和is not null

  1. 查询有领导的员工姓名和领导id
    select name,manager from emp where manager is not null;
  2. 查询没有领导的员工姓名
    select name from emp where manager is null;

9.and 和 or

  1. 查询1号部门工资高于2000的员工信息
    select * from emp where dept_id=1 and sal>2000;
  2. 查询3号部门或工资等于5000的员工信息
    select * from emp where dept_id=3 or sal=5000;
  3. 查询出孙悟空和猪八戒的员工信息
    select * from emp where name=“孙悟空” or name=“猪八戒”;

10.比较运算符 > < >= <= = !=和<>

  1. 查询工资大于等于3000的员工信息
    select * from emp where sal**>=**3000;
  2. 查询工作不是程序员的员工信息(两种写法)
    select * from emp where job**!=**“程序员”;
    select * from emp where job<>“程序员”;

11.between x and y 两者之间

  1. 查询工资在2000到3000之间的员工信息
    select * from emp where sal>=2000 and sal<=3000;
    select * from emp where sal between 2000 and 3000;
    select * from emp where sal not between 2000 and 3000;

12.in关键字

  1. 查询工资等于5000,1500,3000的员工信息
    select * from emp where sal=5000 or sal=1500 or sal=3000;
    select * from emp where sal in(5000,1500,3000);
    select * from emp where sal not in(5000,1500,3000);

13.模糊查询like

%: 代表0或多个未知字符
_:代表1个未知字符

 举例:
 以x开头 x%
 以x结尾 %x
 包含x %x%
 第二个字符是x x%
 以x开头以y结尾 x%y
 第二个是x倒数第三个是y x%y

  1. 查询名字姓孙的员工信息
    select * from emp where name like “孙%”;
  2. 查询名字以精结尾的员工姓名
    select name from emp where name like “%精”;
  3. 查询工作第二个字是售的员工姓名和工作
    select name,job from emp where job like “_售%”;
  4. 查询名字中包含僧并且工资大于2000的员工姓名和工资
    select name,sal from emp where name like “%僧%” and sal>2000;

14.排序order by

 格式: order by 字段名 asc(升序默认)/desc(降序)
description描述
descend 降序

  1. 查询所有员工姓名和工资并按照工资升序排序
    select name,sal from emp order by sal;
    select name,sal from emp order by sal asc;
  2. 查询所有员工姓名和工资并按照工资降序排序
    select name,sal from emp order by sal desc;
  3. 查询所有员工姓名,工资和部门id并且按照部门id升序排序,如果部门id一致则按照工资降序排序
    select name,sal,dept_id from emp order by dept_id,sal desc;

15.分页查询

 格式: limit 跳过的条数,请求的条数(每页的条数)
 *跳过的条数=(请求的页数-1)请求的条数(每页条数)

 举例:
 查询第1页的5条数据(1-5条) limit 0, 5
 查询第2页的5条数据(6-10条) limit 5, 5
 请求第1页的10条数据 limit 0,10
 请求第3页的10条数据 limit 20,10
 请求第8页的10条数据 limit 70,10
 请求第6页的8条数数据 limit 40,8

  1. 查询工资最低的3个员工信息
    查询按照工资升序排序的第一页的3条数据
    select * from emp order by sal limit 0,3;
  2. 按照入职日期(hiredate) 升序排序 查询第3页的3条数据
    select * from emp order by hiredate limit 6,3;
  3. 查询工资最高的员工信息
    select * from emp order by sal desc limit 0,1;
  4. 查询按照工资降序第2页的5条数据
    select * from emp order by sal desc limit 5,5;

16.别名

select name as “姓名” from emp ;
select name “姓名” from emp ;
select name 姓名 from emp ;

17.聚合函数

 通过聚合函数可以对查询的多条数据进行统计查询,统计查询的方式包括:求平均值, 求最大值,求最小值,求和,计数

  1. 平均值avg(字段名)
     查询1号部门的平均工资
    select avg(sal) from emp where dept_id=1;
     查询销售的平均工资
    select avg(sal) from emp where job=“销售”;

  2. 最大值max(字段名)
     查询程序员的最高工资
    select max(sal) from emp where job=“程序员”;

  3. 最小值min(字段名)
     查询3号部门的最低工资
    select min(sal) from emp where dept_id=3;

  4. 求和sum(字段名)
     查询2号部门的工资总和
    select sum(sal) from emp where dept_id=2;

  5. 计数count(*)
     查询程序员的数量
    select count(*) from emp where job=“程序员”;

18.数值计算 + - * / %

  1. 查询每个员工的姓名,工资和年终奖(年终奖=5个月的工资)
    select name,sal,sal*5 年终奖 from emp;
  2. 给3号部门的员工每人涨薪5块钱
    update emp set sal=sal+5 where dept_id=3;

我是将军;我一直都在,。!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值