zoukankan      html  css  js  c++  java
  • SQL语句基础

    一、SQL语句介绍

    SQL(Structure Query Language)结构化查询语言

    SQL语句分类

    数据定义语言 DDL(data defination language)

    create(创建)、drop(删除)、alter(修改)

    用于创建、修改、删除数据库/表的语言

    数据查询语言 DQL(data query language)

    select操作

    基本结构是由SELECT子句,FROM子句,WHERE子句组成的查询块

    SELECT <字段名表>
    FROM <表或视图名>
    WHERE <查询条件>

    数据操作语言 DML(data manipulation language)

    insert(插入) 、delete(删除)、update(更新)

    主要是数据库增、删、改三种操作

    事务处理语言 TPL

    commit(提交)、rollback (回滚)

    用于控制数据库操纵事务发生的时间及效果,对数据库实行监视等。

    数据控制语言 DCL(data control language)

    grant(授权)、revoke(取消授权)

    用于创建用户!用户赋予权限!

    二、数据库的操作

    DDL数据定义语言

    ​ 一、操作数据库

    • 创建数据库
    create database 数据库名称;
    
    create database 数据库名称 character set gbk;
    
    • 修改数据库编码
     alter database 数据库名称 character set utf8;
    
    • 查看数据库
    show databases;
    
    • 切换数据库
    use 数据库名称;
    
    select database(); --查询当前使用的数据库--
    
    • 删除数据库
    drop database 数据库名;
    

    ​ 二、操作数据表

    • 创建数据库表

    语法

    create table 表名(
    
    列名 类型 [约束] comment '这一列是干啥的',	--comment '注释'--
    
    列名 类型 [约束]
    
    )[charset=utf8] --设置编码格式--
    

    类型

    数字类型

    • int、tinyint - 4字节

    • double(多少位,小调点后面的位数) 注意有效15位!

    • decimal(多少位,小调点后面的位数)注意有效25位!

    时间类型

    • date 年-月-日

    • time 时:分:秒

    • datetime 年-月-日 时:分:秒

    • timestamp 自动时间赋值 年-月-日 时:分:秒

      时间格式就是字符串!真正开发存储时间字符串存时间戳!

    字符串类型

    • char(0-255)
    • varchar(0-65535)
    • 修改数据库表

    添加一列

    alter table 表名 add 列名 类型;
    

    删除一列

    alter table 表名 drop 列名; 
    

    更改列名

    --注意:修改列名的时候尽量不要改类型!--
    alter table 表名 change  原列名  新列名 类型;
    

    修改列类型

    alter table 表名 modify 列名 新类型;
    

    修改表名

    alter table 老表名 rename 新名字;
    

    三、查看数据库表

    desc 表名; --查看当前表包含的列--
    
    show  tables; --查看当前库包含哪些表!--
    

    四、删除数据库表

    drop table 表名;
    

    DML数据操作语言

    • 插入数据
    insert into 表名(列名,列名...) value/values(值,值,值),(值,值,值);
    --值和列名一一对应(位置,类型)--
    insert into 表名 value/values(值,值,值),(值,值,值);
    
    • 修改数据
    update 表名 set 列 = 新值; --全列修改,支持(列 = 列 + - * / 值)--
    update 表名 set 列 = 新值 ,列 = 新值 where 条件; --修改指定位置--
    
    • 删除数据
    delete from 表名; 	--全表删除--
    delete from 表名 where 条件;	--条件删除--
    truncate table 表名;	--truncat只删除数据,不破坏表的结构(定义)--
    

    DQL数据查询语言(重点)

    语法

     select 列表 from 表名 where 列名 逻辑符号 值('字符' int整数)/列名  or/and
    
    • 基本查询
      select * from 表名;
      select 列名,列名 from 表名; 
      
    • 条件查询

      逻辑符号

    =、!=、<>、<、<=、>、>=; //逻辑运算符

    BETWEEN…AND; //在..和..之间的内容

    IN(set); //在set集合中的内容

    IS NULL; //不是空的内容

    AND;

    OR;

    NOT; //非

    查询学号不是S_1001,S_1002,S_1003的记录
    SELECT * from stu where sid not in ('S_1001','S_1002','S_1003');
    
    查询年龄为null的记录
    SELECT * from stu where age IS NULL;
    
    查询年龄在20到40之间的学生记录
    SELECT * from stu where age BETWEEN 20 and 40;
    
    查询性别非男的学生记录
    SELECT * from stu where gender != 'male';
    SELECT * from stu where  not gender = 'male';
    SELECT * from stu where gender <>'male';
    
    查询姓名不为null的学生记录
    SELECT * from stu where NOT sid is null;
    SELECT * from stu where sid is NOT NULL;
    
    • 模糊查询 LIKE
    SELECT * from stu where sid like 值;
    

    值:

    % : 任意长度字符串

    _ :任意一个字符 ps:name like '张_'

    %值%

    • 分支查询
    select 列,
    	case 
    		when 条件 then  值
    		when 条件  then 值
    		else 值
    	end  as ‘列名’ from 表;
    
    • 时间查询
    SYSDATE() 当前系统时间(日、月、年、时、分、秒)
    CURDATE() 获取当前日期
    CURTIME() 获取当前时间
    WEEK(DATE) 获取指定日期为一年中的第几周
    YEAR(DATE) 获取指定日期的年份
    HOUR(TIME) 获取指定时间的小时值
    MINUTE(TIME) 获取时间的分钟值
    DATEDIFF(DATE1,DATE2) 获取DATE1 和 DATE2 之间相隔的天数
    ADDDATE(DATE,N) 计算DATE 加上 N 天后的日期
    1. 时间函数使用

      1. 时间函数可以放在列的位置 select 时间函数

      2. 时间函数可以放在查询值得位置 select * from 表名 where 列名 = 时间函数;

      3. 时间函数也可以放在查询条件位置 select * from 表名 where 时间函数 = 值;

        注意:时间类型可以直接通过 大于 小于等符号进行对比

        例如: hiredate > '1990-01-01'

    2. 数学函数

      1. ceil(数字) 向上舍于

      2. floor(数字)向下舍于

      3. round(数字) / round(数字,小数点为主) 四舍五入

        注意:列或者值得位置都可以进行数学运算!要注意运算符的优先级!必要时候可以使用()控制!

    • 聚合函数

    SUM() 求和

    AVG() 求平均值

    MAX() 求最大值

    MIN() 求最小值

    COUNT() 求个数

    • 字段控制

      DISTINCT 去重复数据

    select distinct 列名 from 表名
    

    IFNULL() 如果为null赋予的值!

    ifnull(列名,如果为null的值)
    

    ​ 列起别名

    select 列名 as 别名;
    select 列名 别名;
    

    排序查询

    语法

    order by 列名  [asc]/desc ,列名 [asc 默认]/desc...; 
    

    注意:如果有多个排序!他们不是平等!有优先级的!前面相等后面才会生效!

    asc:正序 升序 从 小 到 大

    desc:倒叙 降序 从 大 到 小

    分组查询

    语法:group by

    select 分组列,聚合函数 from 表名 group by 列名;
    

    分组条件查询

    语法:having

    group by 列  having 聚合函数 逻辑运算符 值;
    

    分组后的筛选!过滤的组!

    与where的最大区别! 一个是分组前的筛选!一个是分组后的筛选!

    having后面通常跟的是聚合函数!

    分页查询

    语法:linmt

    select * from 表名 limit offset ,rowcount;
    

    offset:起始光标

    rowcount:结束光标

    注意:如果数据库查询的数量不足!只会获取剩余的数量!

    查询总结

    select * from 表名 where like group by 列名 having 
    order by 列名 asc/desc limit  offset,rowcount;
    

    约束限制

    什么是主键?分类?

    具有唯一并且不为null的列!我们可以称它为主键。

    分类:自然主键:本身实体具备的属性!当时具备唯一并且不为null的原则

    自定义主键:完全为了主键而生!

    主键约束 primary key

    1. 直接添加

      create table 表名(
          主键名  int  primary key 
      );
      
    2. 联合主键

      create table 表名(
          列名 int,
      	列名 int,
      	primary key(列名, 列名)
      );
      

    自增约束 auto_increment

    用于与联合主键配合,实现自增

    主键整数类型  int primary key  auto_increment 
    

    拓展:类型是字符串时,使用uuid实现约束

    主键字符串类型  varchar(64) primary key  uuid
    

    唯一约束 unique

    不重复,但是可以为NULL

    域约束

    非空约束 NOT NULL

    列名 类型 not null unique 
    

    默认约束 default

    列名  类型  default 'xxx'
    

    不为负数约束 unsigned

    通常用于限制年龄不为负数

  • 相关阅读:
    Python 队列
    Python 栈
    Python面试百题
    TCP:四次挥手
    TCP:三次握手
    SQL:八 SQL高级处理
    SQL:七 集合运算
    SQL:六 函数、谓词、CASE表达式
    SQL:五 复杂查询
    python爬虫——爬取网页数据和解析数据
  • 原文地址:https://www.cnblogs.com/MonkeySun/p/13347396.html
Copyright © 2011-2022 走看看