SQL语言

本文详细介绍SQL语言中的DDL、DML、DCL及DQL四大核心部分。包括数据库和表的基本操作,如创建、修改和删除;数据的增删改查;用户权限管理;以及复杂的数据查询技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.DDL(数据定义语言:用于定义和管理 SQL 数据库中的所有对象)

1.DDL_数据库

(1)查看所有数据库
    show databases;
(2)选择、切换数据库
    use 数据库名;
(3)创建数据库
    create database (if not exists) 数据库名 (charset=utf8);
(4)删除数据库
    drop dabatase (if exists) 数据库名;
(5)修改数据库编码
    alter database 数据库名 character set utf8;

2.DDL_表

(1)创建表
    create table (if not exists) 表名(
        列名 类型 UNSIGNED AUTO_INCREMENT,  //定义列为自增的属性,一般用于主键,数值会自动加1
        ...  ...
        列名 类型,
        PRIMARY KEY (主键1,主键2,...)       //可以使用多列来定义主键,列间以逗号分隔
    )ENGINE=InnoDB DEFAULT CHARSET=utf8;   //ENGINE 设置存储引擎,CHARSET 设置编码

(2)查看所有表
    show tables;

(3)查看指定表的创建语句
    show create table 表名;

(4)查看表结构
    desc 表名;

(5)删除表
    drop table 表名;

(5)修改表
    (5.1)添加列
        alter table 表名 add(   
            列名 类型,
            列名 类型,
            ...  ... 
        );
    (5.2)修改列类型,可能会影响到已经存在的数据
        alter table 表名 modify 列名 新类型;
    (5.3)修改列名
        alter table 表名 change 原列名 新列名 类型;
    (5.4)删除列
        alter table 表名 drop 列名;
    (5.5)修改表名称
        alter table 原表名 rename to 新表名;
    

二.DML(数据操作语言:对表记录的操作(增删改))

(1)插入数据
    INSERT INTO 表名称
    ( field1, field2,...fieldN )
    VALUES
    ( value1, value2,...valueN )
    ;
【注】
    a.如果没有给出要插入的列,那么表示插入所有列
    a.值的个数必须等于列的个数,并且顺序必须相同

(2)修改数据
    UPDATE table_name SET field1=new-value1, field2=new-value2, ... ...
    (where 条件)
    ;
【注】
    如果不写where语句,默认修改所有记录

(3)删除数据
    delete from 表名 (where 条件);
【注】
    如果不写where语句,默认删除所有记录
    Truncate table 表名 与 delete 不同,它是先drop表,再create表,而且无法回滚。

三.DCL(数据控制语言:是一种可对数据访问权进行控制的指令)

(1)创建用户
    //用户只能在指定的ip地址上登录
    create user 用户名@IP地址 identified by 密码;
    //用户可在任意的ip地址上登录
    create user 用户名@'%' identified by 密码;

(2)给用户授权(用户 + 权限 + 数据库)
    //给用户分派再指定数据库上指定的权限
    grant 权限1,...权限n on 数据库.* to 用户名@IP地址;
    //给用户分派再指定数据库上的所有权限
    grant all on 数据库.* to 用户名@IP地址;
【例】
    grant create,alter,drop,insert,update,delete,select on test.* to user@localhost;

(3)撤销授权(用户 + 权限 + 数据库)
    //撤销指定用户在指定数据库上的指定权限
    revoke 权限1,...权限n on 数据库.* from 用户名@IP地址;
【例】
    revoke create,alter,drop on test.* from user@localhost;

(4)查看权限
    show grants for 用户名@IP地址;

(5)删除用户
    drop user 用户名@IP地址;

四.DQL(数据查询语言:对表中的数据进行查询)

1.DQL_单表查询

(1)标准的select语句
    SELECT 列名,...,列名
    [ INTO new_table ]  
    FROM 表名
    WHERE 条件

(2)排序 order by
    order by 列名 ASC|DESC;
    order by 列名1 ASC|DESC, 列名2 ASC|DESC, ... 列名n ASC|DESC;

(3)分组 group by... having ... :HAVING子句可以让我们筛选分组后的各组数据。
    SELECT 列名,聚合函数(列名)
    FROM table_name
    GROUP BY 列名 
    having 聚合函数(列名) 条件 ;

(4)聚合函数
    select count(*)|count(列名) FROM 表名     //求不为null的记录数或者字段数
    select max(列名) FROM 表名                //求某列最大值
    select min(列名) FROM 表名                //求某列最小值
    select avg(列名) FROM 表名                //求某列平均值
    select sum(列名) FROM 表名                //求某列总和
    select first(列名) FROM 表名              //查询指定列中第一个记录的值。
    select last(列名) FROM 表名              //查询指定列中最后一个记录的值

(5)模糊查询like
   【通配符】
        _    :    匹配单个字符
        %    :    匹配任意字符
   【例如】
        SELECT * FROM Websites WHERE url LIKE 'https%';

(6)limit 关键字,常用来做分页处理
    limit关键字用来限定查询时的起始行,以及查询的总行数:limit n,m; 
    n:查询起始下标,从0开始
    m:查询的数量
    【例如】
        一页显示 十 条记录,显示分页后第 三 页的内容:
            select * 
            from 表名
            limit  20,10

    [公式]:limit (当前页-1)*每页记录数,每页记录数

(7)查询null值
    IS NULL: 当列的值是 NULL,此运算符返回 true。
    IS NOT NULL: 当列的值不为 NULL, 运算符返回 true。
    <=>: 比较操作符(不同于 = 运算符),当比较的的两个值相等或者都为 NULL 时返回 true。

(8)IN 操作符
    SELECT 列名,...,列名
    FROM 表名
    WHERE 列名 IN (value1,value2,...valueN);

(9)BETWEEN ... AND ... :选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
    SELECT 列名,...,列名
    FROM 表名
    WHERE 列名 BETWEEN value1 AND value2;

(10)别名 as
    1.列别名:SELECT 列名 AS 列别名
    2.表别名:FROM 表名 AS 表别名

(11)SELECT INTO 语句从一个表复制数据,然后把数据插入到另一个新表中
    SELECT 列名,...,列名
    INTO 新表
    FROM 旧表;
【注】
    Mysql不支持SELECT ... INTO 语句,但支持 INSERT INTO ... SELECT 。
    mysql> INSERT INTO 新表(runoob_id,runoob_title,runoob_author,submission_date)
        -> SELECT runoob_id,runoob_title,runoob_author,submission_date
        -> FROM 旧表;

(12)AND & OR 运算符用于基于一个以上的条件对记录进行过滤
    AND: 如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。
    OR:  如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录。

(13)SELECT DISTINCT 一个列可能会包含多个重复值,仅仅列出不同(distinct)的值。
    SELECT DISTINCT 列名
    FROM 表名;

2.DQL_多表查询

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值