SQL:结构化查询语言(structure Query Language),用于访问和处理数据库的标准的计算机语言。
数据库一般分为关系型数据和NoSql数据库, 关系型数据库 一般使用sql 操作。
数据库种类: mysql、 sql Server、Oracle、 DB2、mongDB。
数据库服务器、数据库、表之间关系:
SQL语言按其功能分为4类:
1、数据定义语言(DDL Data Definition Language)
创建、修改或删除数据库中表、视图、索引等对象的操作,常用命令为create、alter和drop
2、数据查询语言(DQL Data Query Language)
按照指定的组合、条件表达式或排序检索已存在的数据库中数据,不改变数据库中数据,常用命令为select
3、数据操纵语言(DML Data Manipulation Language)
向表中添加、删除、修改数据操作,常用命令有insert、update和delete
4、数据控制语言(DCL Data Control Language)
用来授予或收回访问数据库的某种特权、控制数据操纵事务的发生时间及效果、对数据库进行监视等操作
常用命令有GRANT、REVOKE、COMMIT、ROLLBACK
数据库操作:
1、查看当前数据库服务器有哪些数据库: show databases;
2、使用当前数据库服务器下的某一个数据库:use 数据库名称;
3、创建数据库:create database 数据库名称;
4、删除数据库:drop database 数据库名称
数据表操作:
1、创建数据表:
2、添加一条数据
3、修改一条数据
4、删除一条数据
5、数据查询
创建数据库:
Create database dbname;
创建数据表:
语法:
create table table_name (column_name1 column_type1[, column_name2 column_type2[, …]] )
a、table_name——表名
b、column_name——字段名
表名与字段名命名规则:
i、必须以字母开始
ii、必须是1到30 个字符长度
iii、只能包含字母、数字、下划线“_”、美元符“$”和井号“#”
Ⅳ、不能使用Oracle的关键字
Ⅴ、同一个用户所拥有的对象之间不能重名
c、datatype——数据类型
常用数据类型:
i、char(size):存储固定长度的字符串。参数size指定了长度,如果存储的字符串长度小于size,用空格填充,默认长度为1,最长不超过2000个字节;
ii、varchar2(size):存储可变长度的字符串。参数size指定了该字符串的最大长度。默认长度为1,,最长不超过4000个字节;
iii、number(p,s):存储变长的数字。既可以存储浮点数,也可以存储整数。p表示数字的最大位数(如果是小数包括整数部分、小数部分,不包括小数点,p默认是38位),s指小数位数
Ⅳ、timestamp:和DATE类型大致相同,不过timestamp精确到了秒后6位小数
Ⅴ、clob:存储单字节字符大数据。和varchar2数据类型相似,最大可以存储4G的数据,可以用来存储非结构化的XML文档
ⅶ、blob:存储无结构的二进制大数据。最大可以存储4G的数据,可以用来存储图像、视频、音频等信息;
d、[default default_value]——设定字段默认值
***约束:分为字段级别约束和表级别约束:字段级约束:只为单个字段添加约束;表级约束:为一个或多个字段添加约束
①、not null:指定字段不能为空,只能定义为字段级约束
②、unique:指定字段的值(或字段组合的值)对于表中所有的行必须是唯一的。对于无非空约束的字段,唯一键约束允许输入空值,且包含空值的行可以有多个。可以为字段级别约束,也可以为表级别约束,表级约束时可以定义复合唯一键。主键是表中每行数据的唯一标识。
③、primary key:指定主键。该约束强制字段或字段组合必须具有唯一性且每个字段不能为空。可以为字段级别约束,也可以为表级别约束。
示例:
create table stuinfo( stu_no varchar(11) not null primary key, stu_name varchar(50) not null, age int(2) , gender int(1) default 1 );
修改数据表结构:
修改goods表添加一个主键。
ALTER TABLE `goods` DROP PRIMARY KEY, ADD PRIMARY KEY (`id`, `goods_name`);
修改数据:
update table_name set column_name1 = column_value1 [, column_name2 = column_value2[, …]] where column_name3 = column_value3[ and | or column_name4 = column_value4[ and | or …]]
示例:
update stuinfo set stu_name='小明', age=18 where stu_no = '12345678945';
删除表:
Drop table 表名;
删除数据:
delete from table_name where column_name1 = column_value1 [ and | or column_name2 = column_value2[ and | or …]]
示例:
delete from stuinfo where stu_no='12345678943';
清空表数据TRUNCATE :
TRUNCATE table test.stuinfo;
与delete 区别:
1> delete 删除所有的数据之后当事务没提交,可以将数据回滚。Truncate不可以。
2> delete 删除所有的数据之后,数据占用的空间还在,truncate 将占用的表空间也清除掉。
查询语法结构:
Select distinct[字段名 ] from tablename
通配符*代表所有的字段:
查询所有列的数据
Select * from stuinfo
查询固定列的数据,列的顺序与SQL语句中列的顺序保持一致:查询学生姓名、学生编号
select stu_name, stu_no from stuinfo;
对查询字段进行重命名(列原名与重命名之间可以是as 或者省略as不写。)
select stu_name '学生姓名', stu_no '学生编号' from stuinfo;
select stu_name as '学生姓名', stu_no as'学生编号' from stuinfo;
如果SQL语句中出现自定义字符串,一定要使用单引号或双引号包围
去重操作:使用关键字 distinct
select distinct stu_no from stuinfo;
字符串拼接函数concat(字符串, clolumn0, clolumn1 ... )
select concat('学生姓名:',stu_name) stuName, concat('学生编号:',stu_no) stuNo
from stuinfo;
条件查询 between and :
select * from stuinfo where id between 3 and 8
条件查询 in, not in
select * from stuinfo where id = 3 or id = 5 or id =8;
相当于
select * from stuinfo where id in (3, 5, 8);
模糊条件查询 like, not like :一般需要使用两个通配符 ‘%’代表任意个字符,’_’代表一个字符。
select * from stu_info where stu_name like '白%'; select * from stu_info where stu_name like '小_';
条件查询:null 与not null null 与‘’不同,需要注意
select * from stu_info where tel_no is null;
多表链接查询:
1> 以学生表与班级表作为例子,查询学生班级信息:
Select 字段名 from 表1、表2 where 查询条件
例子:
select stu.stu_no, stu.stu_name, stu.age, stu.email, cl.class_name from stu_info stu, class_info cl where stu.class_id=cl.id;
2>左连接:以left关键字左边的表为主表,列出所有符合主表的数据记录,如果副表有相对的数据记录则显示,如果没有则显示为null;
Select 字段名 from 表1 left join 表2 on 表的关系条件
3>右链接:以right关键字右边的表作为主表进行查询,列出所有符合主表的数据记录,如果副表有相对的数据记录则显示,如果没有,则对应的字段显示为null;
4>排序:语法 order by 字段 ASC|DESC;
5>group by.
注释
表注释
comment on table 表名 is '注释内容';
字段注释
comment on column 表名.字段名 is '注释内容';
函数
Count()函数:
select count(id) from stu_info ;
Count(字段名)可以使用表中任何字段,最好使用主键或者索引,也可以使用一个数字常量;
select count(0) from stu_info;
Sum()函数
获取所有学生的年龄的和。
select sum(age) from stu_info;
Avg()函数
获取所有学生的平均年龄:
select sum(age)/count(id) from stu_info;
等同于
select avg(age) from stu_info;
Now() 与sysdate()函数:
表示获取当前时间:select now(); 或者select sysdate();
可以使用select 做简单的数学计算如:select 1+1;
Max()与min()函数:
获取所有学生中年纪最大的是多少?
Select max(age) from stu_info;
获取所有学生中年纪最小的是多少?
Select min(age) from stu_info;
Limit查询用法:select * from 表名 limit 开始下标, 数据条数。
查询10条学生信息。
Select * from stu_info limit 0 , 10;
数据排序:
order by 栏位名称 asc; 由小到达
order by 栏位名称 desc; 由大到小