zoukankan      html  css  js  c++  java
  • spl

    什么是 SQL?

      • SQL 指结构化查询语言
      • SQL 使我们有能力访问数据库
      • SQL 是一种 ANSI 的标准计算机语言
      • sql注释:

        第一种:--

        第二种:#

    Sql分类:

    DDL:数据定义语言(库,表) 关键字:CREATE(创建) drop(删除) alter(更新)

    创建库 CREATE DATABASE 库名;

     

    删除库 DROP DATABASE test;

     CREATE TABLE 表名(

        字段 数据类型,

        VARCHAR相当于String,CHAR

        多个字段之间用,隔开最后一个不要,

       )

     

      增加字段

     

      ALTER TABLE 库名 add COLUMN 字段名 int

     

      删除字段

     

      ALTER TABLE 库名 DROP COLUMN 字段名

     

    DML:数据操作语言(记录,相当于new java对象) 关键字: insert update delete

    主键:唯一标识

    id int PRIMARY key auto_increment, 设置主键自增

     

    添加数据值要与列一一对应

     

    语法:INSERT INTO 表名 (字段列) values(值...);

    语法:INSERT INTO 表名 values(值...);

    MODIFY修改数据类型

    语法:ALTER TABLE 表名 MODIFY 字段名 数据类型

     CHANGE修改列名

    语法:ALTER TABLE 表名 CHANGE 旧名 新名 数据类型

    更改数据update

    UPDATE 表名 set 字段=值 条件

    删除数据delete

    DELETE FROM 表名 WHERE 条件

    TRUNCATE新建一张与原表结构一摸一样的表

    TRUNCATE 表名

    DCL:数据控制语言

    DQL:数据查询语言 关键字: select 

     

     

       查询表中所有的字段

     

    SELECT * from 表名

    #运算符 > < >= <= != null ISNULL   null与任何值相加都为null

    SELECT * from 表名 where 条件

    SELECT * from emp WHERE common is not NULL

       SELECT * from emp WHERE not common is NULL

    BETWEEN AND  (选取在两数之间的值)

     

    SELECT * from emp

     

    WHERE salay BETWEEN 4500 AND 5000

     

    IN

     

    SELECT * from emp WHERE id in (1,3,5,7)

     

    模糊查询 like一般与通配符一起使用

     

    通配符:_单个字符 %任意个数的字符

     

    SELECT * from emp WHERE e_name LIKE "张_"

     

    SELECT * from emp WHERE e_name LIKE "张%"

     

    SELECT * from emp WHERE e_name LIKE "%三%"

     

    排序 ORDER BY

     

    ASC升序也可省略 DESC降序

    SELECT * from emp ORDER BY salay ASC

    SELECT * from emp ORDER BY salay DESC

    聚合函数 sum avg count max min

    统计总提成

    SELECT sum(字段名) from emp

    求提成的平均值

    SELECT avg(字段名) from emp

    只能统计不为null的个数

    函数中的参数为数字代表统计的是记录

    统计记录的数量

    SELECT count(1) from emp

    SELECT count(*) from emp

    求最大值

    SELECT max(common) from emp

    求最小值

    SELECT min(common) from emp

        分组GROUP BY一般与聚合函数一块使用

    -- 按部门总成本排序

    SELECT depart,sum(salay) a,sum(common) b

    ,sum(salay+IFNULL(common,0)) c

    FROM emp GROUP BY depart ORDER BY c

    -- 查询部门成本大于12000

    where 与 HAVING

    -- where放在表名后过滤大的条件

    -- having一般与分组合用过滤分组后的条件

    SELECT depart,sum(salay) a,sum(common) b

    ,sum(salay+IFNULL(common,0)) c

    FROM emp

    GROUP BY depart

    HAVING sum(salay+IFNULL(common,0))>=12000

    分页limit

    -- limit一个参数代表查询的数量

    SELECT * FROM emp LIMIT 5

    -- limit两个参数:

    -- 第一个代表开始搜索的位置,位置从0开始

    -- 第二个参数代表查询的数量

    SELECT * FROM emp LIMIT 1,4

      

     多表联查

        子查询:以一个结果为另一个查询的条件

         SELECT*FROM 表名 where 字段名 in(select *from 表名 where 条件)

       内连接:隐式内连接

        select 字段名 别名 , 别名.字段名  别名 from 表名 别名  ,表名 别名  where 条件 group by 分完组的字段名

       显示 内连接 innerjoin on 后加条件  内链接只能查询出匹配上的数据 

        SELECT * FROM 表名 a INNER JOIN 表名 b ON a.字段名=b.字段名

       外连接

          笛卡尔积:多表联查没条件,多张表中记录相乘

          左连接:以左表为基础表

            select * from 表名 left outer(可省略) join 表名 on 条件 

          右链接:以由表为基础表

            select* from 表名 right outer join 表名 on 条件

          交叉链接:一般出现笛卡尔积现象

            select*from 表名 cross outer join 表名 on 条件

          外键。一句话概括:如果一个表A的主键还存在与另一个表B中,那么B中这个字端可以作为A表的外键。

        (有一种好记的方法是,存在与外面的主键就是外键)。比如上面成绩表的学号是学生表的外键,成绩表的课程编号是课程表的外键。

            主键是唯一的,用于标识一张表。外键可以有多个,用于建立表和表的关系。

         作用:主要保证数据的完整性

         创建表时创建外键

        CREATE TABLE Orders

        O_Id int NOT NULL,

        OrderNo int NOT NULL,

        e_id int,

        PRIMARY KEY (O_Id),

        FOREIGN KEY (e_id) REFERENCES emp(id)

        )

        删除外键

        语法:ALTER TABLE 表名 DROP FOREIGN KEY 外键名

        ALTER TABLE orders DROP FOREIGN KEY o_e_fk

         创建表后添加外键

        #语法:Alter table 表名 add constraint 外键名字 foreign key (外键字段) references 父表(主键字段);

         ALTER TABLE orders ADD CONSTRAINT o_e_fk

        FOREIGN KEY (e_id) REFERENCES emp(id)

        先删除外键表中的数据再删关联表中的数据

        DELETE from orders WHERE o_id=2

        DELETE from emp WHERE id=2

     事务:

     事务:主要用于处理操作量大,复杂度高的数据,一个程序执行的最小单元

     事务的特性:(ACID)

    原子性:事务的不可分割,组成事务的各个逻辑单元不可分割。

    一致性:事务执行的前后,数据完整性保持一致。

    隔离性:事务执行不应该受到其他事务的干扰。

    持久性:事务一旦结束,数据就持久化到数据库中。

     隔离级别:

    脏读:一个事务读到了另一个事务未提交的数据,导致查询结果不一致

    不可重复读:一个事务读到了另一个事务已经提交的update的数据,导致多次查询结果不一致。

    虚读/幻读:一个事务读到了另一个事务已经提交的insert的数据,导致多次查询结果不一致。

     传播行为

    1、PROPAGATION_REQUIRED:如果当前没有事务,就创建一个新事务,如果当前存在事务,就加入该事务,该设置是最常用的设置。

     2、PROPAGATION_NESTED:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作

     3、PROPAGATION_SUPPORTS:支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就以非事务执行。‘

     4、PROPAGATION_MANDATORY:支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就抛出异常。

     5、PROPAGATION_REQUIRES_NEW:支持当前事务,创建新事务,无论当前存不存在事务,都创建新事务。

     6、PROPAGATION_NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。

     7、PROPAGATION_NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。

     实例:

    #创建事务 TRANSACTION

    BEGIN;#开始事务

    INSERT INTO stu(name,sex,age,s_no) VALUES('admin','男',22,'s_002');

    COMMIT;#提交事务

     BEGIN;#开始事务

    INSERT INTO stu(name,sex,age,s_no) VALUES('李四','男',22,'s_001');

    ROLLBACK;#回滚事务

  • 相关阅读:
    (第三周)c#程序理解
    (第三周)使用visual studio 2015进行单元测试
    (第二周)软件工程第二周之四则运算
    (第二周)读《我是一只IT小小鸟》有感
    Jmeter--参数化的两种方法
    接口测试(1)
    自动化测试框架Cucumber和RobotFramework的对比
    selenium2+Python--学习进阶路线图
    Robot Framework--环境搭建(Mac)
    Selenium2+Python--python3.6 安装 xlrd 模块---Mac
  • 原文地址:https://www.cnblogs.com/xsh726/p/11759446.html
Copyright © 2011-2022 走看看