• MySQL数据库基本sql


    Mysql为例总结

    一.常规语句

    1.创建数据库

    CREATE DATABASE 数据库名;

    2. 创建表

    CREATE TABLE table_name (column_name column_type);

    3. 插入数据

    INSERT INTO table_name ( field1, field2,...fieldN )

                           VALUES

                           ( value1, value2,...valueN );

    4. 查询数据

    SELECT column_name,column_name

    FROM table_name

    [WHERE Clause]

    [LIMIT N][ OFFSET M]

    5. 修改数据

    UPDATE table_name SET field1=new-value1, field2=new-value2

    [WHERE Clause]

    5.1 增加列

    Alter table copy1 add gender VARCHAR(255);

    5.2.修改列名称

    修改列employee_age 名称为 age:

    ALTER TABLE copy1  CHANGE employee_age age VARCHAR(32);

    5.3 修改列类型

    修改列age 类型为 VARCHAR(16)

    ALTER TABLE copy1  MODIFY age VARCHAR(16);

    5.4删除列

    删除表的age列:

    ALTER TABLE copy1 DROP age;

    6. 删除数据

    DELETE FROM table_name [WHERE Clause]

    二.方便测试开展的语句

    1.常用聚合函数

    avg(字段名):求该字段的平均值

    sum(字段名):求和

    max(字段名):求最大值

    min(字段名):求最小值

    count(字段名):统计该字段的记录的条数

    2.拷贝表数据

    拷贝数据,源表名:a 目标表名:b,两个表结构一样不一样均可

    insert into b(a, b, c) select d,e,f from b;

    3.复制表结构

    只复制表结构到新表

    CREATE TABLE 新表 SELECT * FROM 旧表 WHERE 1=2;

    CREATE TABLE 新表 LIKE 旧表 ;

    4.复制表结构及数据

    CREATE TABLE 新表 SELECT * FROM 旧表;

    5.子查询

    表名1a 表名2b

    select a,b,c from a where a IN (select d from b )

    或者

     select a,b,c from a where a IN (1,2,3)

    6.前几条记录

    select * from table LIMIT 5,10; #返回第6-15行数据

    select * from table LIMIT 5; #返回前5

    select * from table LIMIT 0,5; #返回前5

    7. 随机取数据

    随机取出10条数据

    SELECT * FROM table ORDER BY RAND() LIMIT 10;

    8.分组查询

    8.1. GROUP BY单独使用

    SELECT MAX(age),gender FROM copy1 GROUP BY gender;

    8.2 GROUP BYHAVING关键字,一起使用

    查询copy1 表,按照gender字段进行分组,查询出age字段值之和小于100的分组

    SELECT MAX(age),gender FROM copy1 GROUP BY gender HAVING sum(age)<100;

    9. Exists子查询

    drop table if exists student; 意思是如果存在表student则删除!否则不删除!

    Create table if not exists student; 意思是如果不存在表student则创建,否则不创建!

    Select 列表 from  表名  where  exists (子查询);

    #B查询涉及id,使用索引,故B表效率高,可用大表 -->外小内大

    select * from A where exists (select * from B where A.id=B.id);

    #A查询涉及id,使用索引,故A表效率高,可用大表 -->外大内小

    select * from A where A.id in (select id from B);

    1exists是对外表做loop循环,每次loop循环再对内表(子查询)进行查询,那么因为对内表的查询使用的索引(内表效率高,故可用大表),而外表有多大都需要遍历,不可避免(尽量用小表),故内表大的使用exists,可加快效率;

    2in是把外表和内表做hash连接,先查询内表,再把内表结果与外表匹配,对外表使用索引(外表效率高,可用大表),而内表多大都需要查询,不可避免,故外表大的使用in,可加快效率

    3如果用not in ,则是内外表都全表扫描,无索引,效率低,可考虑使用not exists,也可使用A left join B on A.id=B.id where B.id is null 进行优化。

  • 相关阅读:
    平衡树——旋转treap,AVL树和WBLT
    笛卡尔树
    平衡树——B树、左偏红黑树和红黑树(待更)
    高度模式化的线段树写法
    Vue05router之嵌套路由以及其参数传递
    Vue03vue基本语法知识的总结
    Jackson 实现多态反序列化
    机器学习感言
    MySQL 逻辑删除遇上 UNIQUE KEY
    Java 写 ZIP 文件夹及文件
  • 原文地址:https://www.cnblogs.com/fppblog/p/12441200.html
Copyright © 2020-2023  润新知