SQL通用语法

  • SQL通用语法

(1)SQL语句可可以执行单行或多行书写,以分号结尾;

(2)SQL语句可以使用空格/缩进来增加语句的可读性;

(3)MySQL数据库的SQL语句不区分大小写,关键字建议使用大写;

(4)注释:单行注释:--注释内容  或 #注释内容(MySQL特有的)

                    多行注释: /* 注释内容 */

  • SQL语句的分类

(1)DDL Date Definition Language        数据定义语言,用来定义数据库对象(数据库,表,字段)

(2)DML Date Manipulation Language  数据操作语言,用来对数据表的数据进行增删改

(3)DQL Date Query Language            数据查询语言,用来查询数据库中表的记录

(4)DCL Date Control Language          数据控制语言,用来创建数据库用户、控制数据库的访问权限

 

  • DDL-数据库操作

(1)查询:

        查询所有的数据库:SHOW DATABASES

        查询当前数据库: SELECT DATABASE()

(2)创建:[]后的参数是可选的

        CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集 ] [CONTROL 排序规则];

(3)删除:

        DROP  DATABASE [IF EXISTS] 数据库名;

(4)使用:

        USE 数据库名;

  • DDL-表操作-查询

(1)查询当前数据库所有表

        SHOW TABLES;

(2)查询表结构

        DESC 表名;

(3)查询指定表的建表语句

        SHOW CREATE TABLE 表名;

  • DDL-表操作-创建   

(1)创建表

CREATE TABALE 表名(

              字段1 字段1类型,

              字段2 字段2类型,

              ... ,

              字段n 字段类型

)[COMMENT 表注释];

注意:最后一个字段不要假逗号

(2)CREATE TABLE 新表名 AS SELECT * FROM 旧表名;  #复制表结构和数据到新的表里边

(3)CREATE TABLE 新表名 Like 旧表名;                                  #复制表结构到新表

  • DDL-表操作-修改

(1)添加字段

          ALTER TABLE 表名  ADD 字段名 类型 (长度) [COMMENT 注释] [约束];

(2)修改数据类型

        ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度);

(3)修改字段名和字段类型

        ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度);

  • DDL-表操作-删除

(1)删除字段:

        ALTER TABLE 表名 DROP 字段名;

(2)删除表:

        DROP TABLE [ IF EXISTS] 表名;

(3)删除制定表,并重新创建该表

        TRUNCATE TABLE 表名;

  • DDL-表操作-修改

修改表名:ALTER TABEL 表名 RENAME TO 新表名;

 

  • DML-添加数据(INSERT)

(1)给指定的字段添加数据

INSERT INTO 表名 (字段名1,字段名2,...) VALUES(值1,值2,...);

(2)给全部字段添加数据

  INSERT INTO 表名 VALUES(值1,值2,...);                           #没有指定字段名,就是给所有的字段添加值
(3)批量添加数据
  INSERT INTO 表名(字段名1,字段名2,...) VALUES(值1,值2,...),(值1,值2,...),(值1,值2,...);
  INSERT INTO 表名 VALUES(值1,值2,...),(值1,值2,..),(值1,值2);
(4)复制旧表的内容到新表
  INSERT INTO new_table SELECT * FROM old_table;
注意:插入数据时,指定的字段顺序需要和值的顺序是一一对应的
字符串和日期型数据应该包含在引号中
插入的数据大小,应该在字段的规定范围内

  • DML-修改数据(UPDATE)

UPDATE 表名 SET 字段名1=值1,字段名2=值2,...[WHERE 条件];                 #没有条件时,则说明要修改表中该字段所有的值

  • DML-删除数据(DELETE)

DELETE FROM 表名 [WHERE 条件];                              #没有加where时,表示的删除表中所有数据

  • DQL-数据查询语言

SELECT

    字段列表

FROM

    表名列表

WHERE

    条件列表


GROUP BY

    分组字段列表(聚合函数 count max min count avg sum)
HAVING

    分组后条件列表
ORDER BY

    排序字段列表
LIMIT

    分页参数
(1)DQL-基本查询
  1)查询多个字段

    SELECT 字段1,字段2,字段3... FROM 表名;

    SELECT * FROM 表名;

    尽量不要写*

  2)设置别名

    SELECT 字段1 [AS 别名1],字段2 [AS 别名2] ... FROM 表名;

  3)去除重复记录

    SELECT DISTINCT 字段列表 FROM 表名;

(2)DQL-条件查询

  1)语法

    SELECT 字段列表 FROM 表名 WHERE 条件列表;

  2)条件

    比较运算符

      >             大于

      >=              大于等于

      <             小于

      <=                小于等于

      =             等于

      <>                或 != 不等于

      BETWEEN ... AND ...       在某个范围之内(含最大值、最小值)

      IN(...)            在IN之后的列表中的值,多选....

      LIKE            占位符 模糊匹配(_匹配单个字符,%匹配任意一个字符)

      IS NULL           是NULL   

     逻辑运算

      AND&&         并且(多个条件同时成立)

      OR||            或者(多个条件任意一个成立)

      NOT!           非,不是

(3)聚合函数

1)介绍
  将一列数据作为一个整体,进行纵向计算
2)常见聚合函数
  count      统计数量

  max        最大值

  min         最小值

  avg         平均值

  sum        求和

3)语法

  SELECT 聚合函数(字段列表) FROM 表名;      #null值不参与计算

(4)分组查询

1)语法

  SELECT 字段列表 FROM [WHERE 条件] GROUP BY 分组字段名 [HAVING 分组后过滤条件];

2)where和having区别

  执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤;

  判断条件不同:where不能对聚合函数进行判断,而having可以

  select gender,count(*) from 528_1 group by gender;

注意:

  执行顺序:where > 聚合函数 >HAVING

  分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义

  select gender, count(*) from 528_1 group by gender; 根据性别进行分组,统计男性和女性人员的数量

  select gender,avg(age) from 528_1 group by gender; 根据性别进行分组,统计男性和女性人员的平均年龄

  select summery,count(*) from 528_1 where age < 30 group by summery having count(*) > 3; 查询年龄小于30,并根据总结分组,获取总数大于3的总结

  select summery,count(*) as a1 from 528_1 where age < 30 group by summery having a1 > 3;

(5)排序查询(多字段排序,第一个字段值相同,则用第二个字段排序)

1)语法

  SELECT 字段列表 FROM 表名 GROUP BY 字段1 排序方式1,字段2 排序方式2;
2)排序方式

  ASE 升序(默认)

  DESC 降序

  select * from 528_1 order by age asc;

  select * from 528_1 order by name desc ;

  select * from 528_1 order by age asc,name desc;

(6)分页查询

  1)语法

  SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询记录数;

注意:

起始索引从0开始,起始索引 = (查询页码-1) * 每页显示记录数

分页查询是数据库的方言,不同的数据库有不同的分页的实现,MySQL中是LIMIT

如果查询的是第一页,起始索引可以忽略,直接简写为limit 10

(7)练习

查询年龄为22,25,26的员工信息

select * from 528_1 where gender='女' and age in(22,25,26);

查询性别为男,且年龄为28-40以内名词为4位数的员工信息

select * from 528_1 where `528_1`.gender='男' and (age between 26 and 40) and name like '____';

根据性别分组,查询男性人数和女性人数小于30的总数

select gender,count(*) from 528_1 where age < 30 group by `528_1`.gender;

查询所有年龄小于等于30岁的员工的姓名和年龄,并对查询结果年龄升序排序,如果年龄相同则按入职时间降序

select name,age,date from 528_1 where age <= 30 order by age asc , date desc;

查询性别为男,且年龄为22-26岁的3个员工信息,对查询结果按年龄升序排序,年龄相同按时间排序

select * from 528_1 where gender='男' and (age between 22 and 30) order by age,date desc limit 3;

(8)执行顺序

编写顺序              执行顺序

SELECT      ④      FROM

    字段列表

FROM       ①      WHERE

    表名列表

WHERE       ②      GROUP BY

    条件列表

GROUP BY    ③       SELECT

    分组字段列表

HAVING            ORDER BY

    分组后条件列表

ORDER BY      ⑤        LIMIT

    排序字段列表

LIMIT        ⑥

    分页参数

 

  • DCL -管理用户

(1)查询用户

USE mysql;

SELECT * FORM user;

(2)创建用户

CREATE USER ‘用户名'@’主机名' IDENTIFIED BY '密码';

create user `itcast`@`localhost` identified by '123456'; #只能在本机访问数据库

create user `itcast`@`%` identified by '123456';

(3)修改用户密码

ALTER TALBE ‘用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码';

alter user `itcast`@`localhost` identified with mysql_native_password BY '123';

(4)删除用户

DROP USER '用户名'@'主机名';

  • DCL-权限控制

(1)查询权限

SHOW GRANTS FOR `用户名`@`主机名`;

(2)授予权限

GRANT 权限列表 ON 数据库名.表名 TO `用户名`@`主机名`;

(3)撤销权限

REMOVE 权限列表 ON 数据库名.表名 FROM `用户名`@`主机名`;

posted @ 2023-07-18 23:49  羊羊的测试之路  阅读(85)  评论(0编辑  收藏  举报