前言
SQL用于访问和处理数据库的标准的计算机语言。SQL 可与数据库程序协同工作,比如 MS Access、DB2、Informix、MS SQL Server、Oracle、Sybase 以及其他数据库系统。但是由于各种各样的数据库出现,导致很多不同版本的 SQL 语言。为了与 ANSI 标准相兼容,它们必须以相似的方式共同地来支持一些主要的关键词(比如 SELECT、UPDATE、DELETE、INSERT、WHERE 等等),这些就是我们要学习的SQL基础。
SQL的类型:
DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等。
DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据)增删改。
DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别。
DQL(Data Query Language):数据查询语言,用来查询记录(数据)查询。
一、数据表操作
1.创建表
Create table 表名(
字段名 类型 约束
...
)
注意:两个字段的话,第一个字段后面应该跟一个逗号;
常用数据类型:
int:整型
double:浮点型,例如double(5,2)表示最多5位,其中必须有2位小数,即最大值为999.99;默认支持四舍五入。
char:固定长度字符串类型; char(10) 'aaa ’ 占10位
varchar:可变长度字符串类型; varchar(10) ‘aaa’ 占3位
text:字符串类型,比如小说信息;
blob:字节类型,保存文件信息(视频,音频,图片);
date:日期类型,格式为:yyyy-MM-dd;
time:时间类型,格式为:hh:mm:ss
timestamp:时间戳类型 yyyy-MM-dd hh:mm:ss 会自动赋值
datetime:日期时间类型 yyyy-MM-dd hh:mm:ss
如:
create table student2(
id int unsigned primary key auto_increment,
name varchar(10),
age int unsigned,
height decimal(5,2)
)
注:第二行代码是用来约束,表示它的唯一性,主键,int,无符号,自动递增。
2.删除表
Drop table 表名
Drop table if exists 表名 #如果表存在,先删除再创建
3.修改表
alter table 旧表名 rename 新表名 #修改表名
alter table 表名 add 新列名 新的数据类型 #添加列
alter table 表名 change 旧列名 新列名 新的数据类型 #修改列
二、数据查询
Select * from 表名 #查询所有字段
Select 列1,列2 from 表名 #查询指定字段
select name as 姓名,sex as 性别,nametown as 家乡 from students #给查询字段起别名
select s.name,s.age from student2 as s #给表名起别名,前面列名要加s.,查询多个表使用
select distinct sex from student2 #去重复,distinct去重复
三、数据操作
1.添加数据
Insert into 表名 values(1,‘亚瑟’,20,123.1) #给所有字段设置数据,id写一个占位符,可以保证ID自动增长,占位符:0,defalt,null
Insert into 表名(字段1,...) values(值1,...) #给指定字段设置数据,值的顺序与给出的字段顺序对应
insert into student2(name) values('小红');
insert into student2(name) values('小新');
insert into student2(name,age) values('哈哈',20) #写多条插入语句
insert into student2(name) values('大桥1'),('大桥2'),('大桥3') #一条语句插入多条
2.修改数据
Update 表名 set 列1=值1.....where 条件
3.删除数据
delete from 表名 where 条件 #注:要是后面不跟条件,则会清空整个表
四、其他
逻辑运算符:> < and or not
select * from student2 where age<20 and sex = '女' #查询年龄小于20的女同学
模糊查询:Like % 表示任意多个任意字符 -(下划线) 表示一个任意字符
select * from student2 where name like '孙_' #查找姓孙且名字时一个字的学生
范围查询:in表示在一个非连续的范围内 between…and… 表示在一个连续的范围内
select * from student2 where hometown in('北京','上海','陕西') #查询家乡是北京或上海或陕西的学生
空判断:null 与 ‘’ 空字符串是不同的 判空 is null
Select * from student where height is null #查询没有填写身高的学生
排序:select * from 表名order by 列1 asc|desc,列2 asc|desc #默认排序为 ASC 升序,DESC 降序