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

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

posted @ 2020-07-20 20:04  筋肉猩  阅读(184)  评论(0编辑  收藏  举报