美文网首页
SQL数据库基础语法

SQL数据库基础语法

作者: E术家 | 来源:发表于2023-05-19 17:23 被阅读0次
    查看环境变量
    show variables; # 查看环境变量
    show variables where variable_name like '%log%'; # 查看日志相关的环境变量 general_log 默认为OFF
    set global general_log:= 'ON'; # 开启日志记录
    
    创建数据库
    # 普通创建
    create database 数据库名称;
    # 待编码方式的创建
    create database 数据库名称 default charset utf8 collate utf8_general_ci;
    
    查看数据库
    show databases;
    
    删除数据库
    drop database 数据库名称;
    
    选中数据库
    use 数据库名称;
    
    创建表
    create table 表名(
     c1 int,
     c2 char(4),
     c3 varchar(4),
     c4 decimal(5,2),
     c5 date,
     c6 time,
     c7 datetime,
     c8 enum('a', 'b')
    );
    
    删除表
    drop table 表名;
    drop table if exists 表名; # 判定表是否存在,存在再删除
    
    查看表结构
    desc 表名;
    
    显示所有表
    show tables;
    
    约束
    set default_storage_engine=innodb;  # 设置可关联 外键用
    create table t2(
     c1 int primary key, # 当主键
     c2 varchar(4)
    );
    create table t1(
     c1 int not null, # 非空
     c2 int unique, # 唯一,不能重复
     c3 int primary key auto_increment, # 主键 唯一id  primary key(c1,c2) 联合主键 auto_increment 自增
     c4 int default 10, # 默认值
     c5 int, # 外键
     end int,
     foreign key(c5) references t2(c1) # 设置c5为t2的外键
    );
    
    表内容的修改
    create table t1(
     c1 int primary key,
     c2 varchar(4) not null,
     c3 date
    );
    alter table t1 rename t11; # 更改表名
    alter table t11 add c4 enum('1', '2') not null; # 表中新增一列
    alter table t11 drop c4; # 表中删除某一列
    alter table t11 change c3 c33 int not null; # 修改表中的某列,将c3更名为c33且为int类型
    alter table t11 modify c33 int not null; # 修改表中某列对应的数据类型&约束
    
    表中数据的增删改
    create table t1(
     c1 int primary key,
     c2 varchar(4),
     c3 date
    );
    insert into t1 values(c1值, c2值, c3值); # 全量添加
    insert into t1(c1) values(c1值); # 选择对应属性添加
    insert into t1 values(c1值, c2值, c3值), (c1值, c2值, c3值); # 批量添加
    delete from t1; # 清空t1表中的数据 自增id保留
    truncate table t1; # 清空t1表中的数据 = drop table + create table 不能回滚 自增id清零
    delete from t1 where c1 = 1; # 按条件删除
    update t1 set c1 = 2; # 更新表t1中c1的值
    update t1 set c1 = 2, c2 = '566'; # 更新表t1中c1,c2的值
    update t1 set c2 = '233' where c1 = 2; # 按条件更新数据
    
    表中数据查询
    select 值; # 简单查询 显示单个值
    select * from 表名; # 显示表中所有字段的值
    select 字段名1,字段名2,字段名3... from 表名; # 显示表中对应字段的值
    select distinct 字段名1,字段名2,字段名3... from 表名; # 去重查询
    select 字段名1,字段名2,字段名3... from 表名 where 条件; # 条件查询
    select 字段名1 from 表名 where x in (100,101,102); # x在100,101,102中进行判定是否存在
    select 字段名1 from 表名 where x not in (100,101,102); # x在100,101,102中进行判定是否不存在
    select 字段名1 from 表名 where x like ('上海%'); # x在‘上海...’中进行判定是否存在, _ 表示单个字符,% 表示0个或多个字符,仅用于字符/日期查询
    select 字段名1 from 表名 where x is null; # 空值查询
    select 字段名1 from 表名 where x between 10 and 20; # x在10和20之间查询
    select 字段名1 from 表名 where 条件1 and 条件2; # 条件1和条件2同时满足
    select 字段名1 from 表名 where 条件1 or 条件2; # 条件1和条件2任一满足
    
    排序
    create table t1(
     c1 int primary key,
     c2 varchar(4) not null,
     c3 int
    );
    select * from t1 order by c1 asc; # 按c1排序 默认升序 asc可省略
    select * from t1 order by c1,c4; # 可按多个排序
    select * from t1 order by c1 desc; # 降序 
    
    别名
    create table t1(
     c1 int primary key,
     c2 varchar(4) not null,
     c3 date
    );
    select c1 as 别名 from t1; # 将c1以另一个名称展示 as可以省略
    
    聚合函数
    create table t1(
     c1 int primary key,
     c2 varchar(4) not null,
     c3 date
    );
    select count(*) from t1; # 统计t1表中内容条数
    select count(c3) from t1; # 统计t1表中c3内容的条avg数,不统计null
    select avg(c1) from t1; # 统计t1表中c1的平均值
    select sum(c1) from t1; # 统计t1表中c1的和
    select max(c1) from t1; # 统计t1表中c1的最大值
    select min(c1) from t1; # 统计t1表中c1的最小值
    
    分组
    select * from t1 group by c1; # 按c1分组显示
    select c1 count(*) from t1 group by c1; # 按c1分组并显示对应组的数量
    select c1 count(*), max(c2), min(c2) from t1 group by c1; # 按c1分组并显示对应组的数量,并显示c2的最大最小值
    select c1 count(*), max(c2), min(c2) from t1 group by c1 having c1 = 1;  # 按c1分组并显示对应组的数量,并显示c2的最大最小值, 然后进行过滤,只显示c1为1的值 having只能使用group by 后的参数
    
    分页查询
    select * from t1 limit a,b; # 取出t1表中的内容 从第a项开始,取b个值,a可以省略,默认从0开始
    
    多表查询
    select lno from lesson where lname = 'QTP';
    select lno, score from score where lno = 4;
    # 用()将语句替代值
    select lno, score from score where lno = (select lno from lesson where lname = 'QTP');
    
    select * from 表名 where 字段名 in (查询子句); # 多个子句用()包含
    select * from 表名 where 字段名 > all(查询子句); # 比最大的大
    select * from 表名 where 字段名 < all(查询子句); # 比最大的小
    select * from 表名 where 字段名 > any(查询子句); # 比最小的大
    select * from 表名 where 字段名 < any(查询子句); # 比最大的小
    
    关联查询
    #联合
    select * from t1,t2; # 将t1,t2中的数据联合展示 会有无效数据
    select * from t1,t2 where t1.id = t2.id; # 通过id进行关联,移除无效数据
    select * from t1 inner join t2 inner join t3 on t1.id = t2.id and t2.cid = t3.cid; # 另一种写法 关联t1,t2,t3,关联条件写在on后
    select * from t1 left join t2 on t1.id = t2.id; # 左关联, 左表全展示,右表匹配显示,未匹配项用NULL展示
    select * from t1 right join t2 on t1.id = t2.id; # 右关联, 右表全展示,左表匹配显示,未匹配项用NULL展示
    select * from t1 left join t2 on t1.id = t2.id union select * from t1 right join t2 on t1.id = t2.id; # 全外关联,左右表都全显示,未匹配项用NULL展示
    
    时间戳转换
    select unix_timestamp("2022-08-08"), from_unixtime("1659888999") from student;
    

    unix_timestamp(时间类型值)转为时间戳类型值
    from_unixtime(时间戳类型值)转为时间类型值

    相关文章

      网友评论

          本文标题:SQL数据库基础语法

          本文链接:https://www.haomeiwen.com/subject/nqzgsdtx.html