mysql笔记

SQL

  • SQL属于高级语言,标准的SQL适合于所有的数据库产品
  • SQL语句在执行的时候,实际上内部也会先进行编译,然后再执行SQL
  • DBMS 负责执行SQL语句 ,通过执行SQL语句来操作DB当中的数据
  • DBMS(执行)——》SQL——》 操作DB

表 table

  • 表示数据库的基本组成单元 所有的数据都是表的形式组织
  • 非常直观
  • 行: 被称为数据/记录(data)
  • 列: 被称为字段(column)
  • 每一
字段属性
  • 字段名 数据类型 相关的约束

SQL 语句分类

  • DQL (数据查询语言): 查询语句 select语句
  • DML (数据操作语言) : 增删改 insert delete update
  • DDL (数据定义语言):create drop alert 对表结构的增删改
  • TCL (事物控制语言): commit 提交事务 ,rollback回滚事物
  • DCL (数据控制语言): grant授权 revoke撤销权限

DOS命令

mysql -uroot -p333登录数据库

show databases 查询有哪些数据库

create databsae name 创建数据库

use name 使用数据库

show tables 查询数据库中的表

source 地址 导入 .sql 导入sql脚本

drop database name 删库跑路

desc name 查看表结构

select database() 查看当前是那个数据库

select version()查看SQL版本号

\c 结束语句

\q 退出数据库

查询语句(DQL)

  • sql不区分大小写

  • 字段可以参与数学运算

  • select student.name as 111 from student 将名字改为111

  • 标准sql语句的引号要用 单引号 ‘ ’ mysql支持双引号 其他不支持

  • 条件查询

    • select 字段
      • from 表名
      • where 条件;
    • <> 不等于 select name from student where name<>"jack " 查询姓名不为Jack的姓名
  • and 和 between

  • select * from student where age>=10 and age<=20;

  • select * from student where age between 10 and 20 和and相同 左小右大

  • between 左右都闭 用在字符 左闭右开

null和0

判断是否为空

  • null不是一个值 不能用等号衡量 必须使用is null 或者 is not null
  • select * from student where class_nums is null; //查询班级为空的学生信息
and 和 or

and 优先级比or高 当优先级不够的时候+ 括号

in
  • select name from student where class =1001 or class =1002;

  • select name from student where class in(1001,1002) 和or意义相同

not
  • select name from student where class not in(1001,1002) 找出不在1001和1002班级中中学生的名字
模糊查询 like
  • % 代表任意多个字符 _ 代表任意一个字符

select * from student where name like ‘张%’

  • 转移字符 \ _ 表示一个下划线
  • select * from student where name like ‘%\_%’ 查询名字当中含有__的学生

排序

升序和降序 默认升序排列 asc 升序 desc 降序 order by 最后执行

select * from student order by age asc

select * from student order by age desc

  • select * from student order by age desc , sno 按照年龄降序排 并且按学号正序排

  • select * from student order by 1 desc 按照第一列降序排序

分组函数 多行处理函数
  • 分组函数 where后面不可以用

    • count 计数
    • sum 求和
    • avg 平局值
    • max 最大值
    • min 最小值
  • select sum(age) from student 找出年龄总和

  • select max(age) from student 找出年龄最大

  • select min(age) from student 年龄最小

  • select avg(age) from student 平均年龄

  • select count(*) from student 查询总人数

分组函数一共这五个

分组函数忽略null

单行处理函数
  • 单行处理函数 : 输入一行 输出一行
  • ifnull(age,10) 如果年龄为null 可以处理为10

count(*)和count(字段)关系

具体字段统计的是不为空的字段有多少 * 代表所有条数

group by 和having

group by : 按照某个字段或者某个字段进行分组

having : having 是对分组之后的数据进行再次过滤

group by 通常和分组函数使用

  • select max(age) from student group by class_num 查询每个班级年龄最大的学生

select 5 查询

from 1 先找表

where 2 按条件找出相应数据

group by 3 分组

having 4 过滤

order by 6 排序

完整DQL语句

select 5

from 1

where 2

group by 3

having 4

order by 6

去重 + distinct

  • distince 只能出现在所有字段的最前面

select distinct class from student

连接查询

  • 实际开发中 ,大部分都不是单表查询 ,一般都是多张表联合查询取出最终结果

  • 连接查询分类

    • 内连接
      • 等值连接
      • 非等值连接
      • 自连接
    • 外连接
      • 左外连接
      • 右外连接
    • 全连接(很少用)

    92版本

  • select s.name,c.class_num from student s,class c where s.class_num = c.class_num

等值连接 尽量使用99版本 join on 后面可以继续加where 使结构更清晰 条件是等量关系

  • sql99

select s.name,c.class_num

from student s

inner join class c

on

s.class_num=c.class_num

inner(内连接) 可以省略 带着为了可读性好

内连接之 非等值连接

select

e.ename,e.sal,.s.grade

from

​ emp e

inner join

salgeade s

on

e.sal beeween s.losal and s.hisal

内连接之自连接

select

a.ename as ‘员工名’, b.ename as ‘领导名’

from

emp a

inner join

emp b

on

a.mgr = b.empno;

外连接

左外连接 +left outer (outer可以省略 )

from

emp a

left outer join

emp b

on

a.mgr = b.empno;

where 后面嵌套语句

  • ·查询员工工资高于平均薪资的结果

select * from emp where sal>(select avg(sal) from emp);

from后面嵌套语句

  • 找出每个部门平均薪水的等级

select t.deptno ,t.avgsal,s,grade

from

(select deptno,avg(sal) as avgsal from emp group by deptno)

join

​ salgrade s

on

t.avgsal between s.losal and s.hisal;

union (可以将查询结果集相加)

  • 找出工作岗位是 aa 和 bb 的员工

select ename,job from emp where job = ‘aa’

union

select ename,job from emp where job = ‘bb’;

limit (分页查询,) mysql特有

limit startIndex ,length

startIndex 表示起始位置

length 表示取几个

表的复制

create table 表名 as select 表名

插入

insert into 表名(字段1,字段2) values (‘1’,‘2’);

修改
  • 将部门10的LOC修改为SHANGHAI 将部门名称修改为RENSHIBU

update dept1 set loc = ‘SHANGHAI’,dname =‘RENSHIBU’ where deptno = 10;

删除语句

delete from 表名 where 条件;

不加条件 删除所有记录

唯一约束 unique

create table t_user(

​ id int,

username varchar(255) unique//列级约束

unique(usercode,username) //表级约束

)

主键 不能为空也不能重复

数据库各个字段的使用

最基本的SQL语句

  • 查询语句

    • 查询所有学生
    • SELECT * FROM student
    • 连接查询
  • 添加语句

    • 给教师表添加字段
    • INSERT INTO teacher(t_id,t_name) VALUES(04,“张三”)
  • 删除语句

    • 删除教师表中的字段
    • DELETE from teacher where t_id = 4-
  • 修改语句

    • 修改学生表中姓名为王菊的性别
    • UPDATE student set s_sex=“男” WHERE s_name=“王菊”

执行顺序

select 5 查询

from 1 先找表

where 2 按条件找出相应数据

group by 3 分组

having 4 过滤

order by 6 排序

  • select sum(age) from student 找出年龄总和
  • select max(age) from student 找出年龄最大
  • select min(age) from student 年龄最小
  • select avg(age) from student 平均年龄
  • select count(*) from student 查询总人数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值