MySql笔记(详解!!!)

1.MySQL的安装

2.SQL语句的分类

1.DQL:

查询语句 select

select version();

select database();

select *from …

desc …

1.简单查询

SQL语句不区分大小写。

取别名 select name dename,flag from …

select name ‘de name’,flag ‘标志’ from …

2.条件查询

select +查询内容

from + 具体数据库

where

sal between 2450 and 2500;

不等于:!= ,<>;


and 并且

例子:

select empno,ename,job

from emp

where job =‘SALESMAN’ and sal>810 ;


or 或者

例子:

查询工作岗位是manager或salesman的员工

select empno,ename,job

from emp

where job =‘manager’ or job =‘salesman’ ;


and 和or同时出现,and优先级大于or;

in 包含

in (800,5000);相对于枚举,不是范围

not in()

is null ,is not null

大于,小于,等于

like

例子:

找出含有0的

select ename

form emp

where ename like ‘%0%’;

​ ‘%t’(t结尾d);‘k%’(k开头的);‘_a%’(第二个字母是a的);‘__h%’(第三个字母是h的);

3.排序

eg:

按薪资排序

select

​ ename sal

from

​ emp

order by

​ sal;// 默认升序


select

​ ename sal

from

​ emp

order by

sal desc;**// 降序* ;asc//升序;


薪资升序,若薪资一样再按名字升序排列

select

​ ename sal

from

​ emp0

(where

​ sal between 1250 and 3000)

order by

​ sal asc,ename asc;


关键字顺序不能变:

select …from … where …order by …

执行顺序 :

from,where,select,order by

4.数据处理函数/单行处理函数
  1. str_to_date 将字符串转换为日期
  2. data_format 格式化日期
  3. format 设置千分位
  4. round 四舍五入
  5. rand() 生成随机数
  6. ifnull 可以将null转换成一个具体值
5.分组函数(多行处理函数)

输入多行,最终输出一行

  1. 计数 count 找出不为null的个数
  2. 和 sum
  3. 平均 avg
  4. 最大值 max
  5. 最小值 min

先分组再执行。

输入顺序:

  1. select …
  2. form …
  3. where …
  4. group by …
  5. order by …

执行顺序

  1. form
  2. where
  3. group by
  4. select
  5. order by
6.分组查询
  1. 找出每个工作岗位的工资和?

select job,sum(sal)

from emp

group by job;

​ 2.找出每个部门的最高薪资

select deptno ,max(sal) from emp group by deptno;

​ 3.找出每个部门,每个工作岗位的最高薪资?

select deptno,job,max(sal) from emp group by deptno,job;

​ 4.找出每个部门的最高薪资,显示最高薪资大于3000?

selcet deptno,max(sal) from emp where sal>3000 group by deptno;(效率高)

select deptno ,max(sal) from emp group by deptno having sal >3000;

​ 5.找出每个部门的平均薪资,显示平均薪资大于2500?

(where无法使用的情况用having)

select deptno,avg(sal) from emp group by deptno having avg(sal)>2500;

大总结输入和执行顺序

输入顺序

  1. select
  2. from
  3. where
  4. group by
  5. having
  6. order by

执行顺序

  1. from

  2. where

  3. group by

  4. having

  5. select

  6. order by

7.distinct关键词

去除重复的。distinct//(还有 可以用去重复)

select distinct job from emp;

select count(distinct job) from emp;

select job from emp group by job;

8.连接查询
  1. 单独查询概念:从一张表中单独查询,称为单表查询。
  2. emp表和dept表联合起来查询数据,从emp表中取员工名字,从dept中取部门名字,这种叫连接查询。
  3. 连接查询分类:内连接和外连接,全连接(不重要)。
8.1内连接
  1. 等值查询

    查询每个员工所在部门名称,显示员工名和部门名?

    sql92语法:

    select e.name,d.dname

    from emp e,dept d

    where e.deptno =d.deptno;

    select e.name,d.name

    from emp e,dept d

    where e.deptno = d.deptno;

    select e.name,d.dname

    from emp e

    join dept d

    on e.name =d.name

    sql99语法:

    select e.name,d.dname

    from emp e

    (inner) join dept d

    on e.deptno =d.deptno;

    where …

  2. 非等值查询

    找出每个员工的…sal,s.grade

    from emp e join salgrade s

    on e.sal between elosal and s.hisal;

  3. 自连接

    查询员工的上级领导,要求显示员工名和对应的领导名?

8.2外连接
  1. 左连接
  2. 右连接

笛卡尔积现象

当两张表进行连接查询,没有任何条件限制下,最终查询结果条数是两张表的乘积。

eg:14*4=56

如何避免笛卡尔现象?加限制条件///where emp.deptno =dept.deptno;

select ename,dname

from emp ,dept

where emp.deptno =dept.deptno;


改进:select emp.ename,dept.dname

from emp ,dept

where emp.deptno =dept.deptno;


进一步优化:select e.ename,d.dname

from emp e ,dept d //起别名

where e.deptno =d.deptno;

降低表连接的次数

2.DML(事务语句):

对表中数据的增删改

insert updata delete

DML(数据操纵语言)用于在数据库中添加、更新或删除数据。

start transaction(事务)

事务
提交事务:commit

回滚事务:rollback;

事务特性

A:原子性

事务是最小工作单元

C:一致性

所以事务要求,同一个事务当中,所以操作必须同时成功,或者同时失败。

I:隔离性

A事务操作一张表时,B事务不能操作这张表

D:持久性

事务最终结束的一个保障。事务提交才把数据保存到指定位置

常用的 DML 命令:

  1. INSERT:用于向表中插入新的行。
    INSERT INTO 表名 (1,2, ...)
    VALUES (1,2, ...);
    

    例如,将新员工的信息插入到名为 employees 的表中:

    INSERT INTO employees (name, age, salary)
    VALUES ('John Doe', 30, 5000);
    
  2. UPDATE:用于更新表中现有行的数据。
    UPDATE 表名
    SET1 =1,2 =2, ...
    WHERE 条件;
    

    例如,将 ID 为 1 的员工的薪资增加 10%,可以执行以下更新语句:

    UPDATE employees
    SET salary = salary * 1.1
    WHERE id = 1;
    
  3. DELETE:用于从表中删除指定的行。
    DELETE FROM 表名
    WHERE 条件;
    

    例如,删除名为 ‘John Doe’ 的员工信息:

    DELETE FROM employees
    WHERE name = 'John Doe';
3.DDL:

对表的结构进行修改

create 创建

drop 删除

alter 修改

DDL(数据定义语言)用于在数据库中创建、修改或删除数据库对象(如表、索引、视图等)。以下是常用的 DDL 命令:

  1. CREATE:用于创建数据库对象。

    • 创建表:

      CREATE TABLE 表名 (1 数据类型,2 数据类型,
        ...
      );
      

      创建一个名为 employees 的表:

      CREATE TABLE employees (
        id INT PRIMARY KEY,
        name VARCHAR(50),
        age INT,
        salary DECIMAL(10,2)
      );
      
    • 创建索引:

      CREATE INDEX 索引名 ON 表名 (1,2, ...);
      

      employees 表的 name 列创建索引:

      CREATE INDEX idx_name ON employees (name);
      
  2. ALTER:用于修改数据库对象。

    • 修改表结构(添加列、修改列类型等):

      ALTER TABLE 表名 ADD COLUMN 列名 数据类型;
      ALTER TABLE 表名 MODIFY COLUMN 列名 新数据类型;
      

      employees 表添加一个新的 email 列:

      ALTER TABLE employees ADD COLUMN email VARCHAR(100);
      
    • 修改表名:

      ALTER TABLE 原表名 RENAME TO 新表名;
      

      employees 表重命名为 staff

      ALTER TABLE employees RENAME TO staff;
      
  3. DROP:用于删除数据库对象。

    • 删除表:

      DROP TABLE 表名;
      

      删除 employees 表:

      DROP TABLE employees;
      
    • 删除索引:

      DROP INDEX 索引名 ON 表名;
      

      删除 employees 表的 idx_name 索引:

      DROP INDEX idx_name ON employees;
      
4.TCL:

事务控制语言

事物提交:commit;

事物回滚:rollback;

5.DCL:

数据控制语言

授权 grant,撤销权限 revoke …

6.\c 命令终止

MySQL不见”;“不执行。

SQL语句不区分大小写。
取别名 select name dename,flag from …

select name ‘de name’,flag ‘标志’ from …

3.约束

非空 not null

独特 unique

主键 primary key

外键 foreign key

4.做题感悟

​ 1.MySQL 中判断奇数的 6 种方法

mod(x, 2) = 1 ,如果余数是 1 就是奇数。
power(-1, x) = -1 , 如果结果是 -1 就是奇数
x % 2 = 1 ,如果余数是 1 就是奇数。
x & 1 = 1 ,如果是 1 就是奇数

  1. not in在使用时候,后面小括号中记得排除null
not    in (select    max(sal)  ....)

select maxa(sal) from emp where empno  not  in (select  distinct  mgr  from  emp     where   mgr   is  not  null)

​ 3.计算两个日期之间的时间差

timestampdiff(间隔类型,前一个日期,后一个日期)

datediff(后一个日期,前一个日期)///默认为结果为天

eg.

avg(timestampdiff(year,hiredate,now())

间隔类型

年year

季度 quarter

月mounth

星期 week

天day

时hour

分minute

秒second

目前时间

now()

curdate() 无小时分秒

curtime() 无年月日

​ 4.if(a<100,0,1)

解释:如果a<100成立,则a为0

反之为1

​ 5.between 0 and 6

包含边界

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值