DDL (数据定义问题)
数据定义语言 - Data Definition Language
用来定义数据库的对象,如数据表、视图、索引等
DML (数据操纵问题)
数据处理语言 - Data Manipulation Language
在数据库表中更新,增加和删除记录
如 update, insert, delete
DCL (数据控制问题)
数据控制语言 – Data Control Language
指用于设置用户权限和控制事务语句
如grant,revoke,if…else,while,begin transaction
DQL (数据查询问题)
数据查询语言 – Data Query Language
select
① 大数据类型:
Java中:
字节流:InputStream
字符流:Reader
mysql中:
BLOB 保存的字节数据
TEXT 保存字符数据
② 数值型
Java中:byte、short 、 int 、 long 、float、 double
mysql中:tinyint 、smallint、int、bigint、FLOAT、DOUBLE 在创建数据表的时候,数值型也有自己的长度,一般不需要指定,使用默认的长度。
逻辑性
Java中的boolean
mysql中:BIT
日期型
Java中的Date、Time、DateTime、TimeStamp
mysql中:DATE、TIME、DATETIME、TIMESTAMP
timestamp:它和datetime都可以保存年月日时分秒,但是timestamp它在保存数据的时候表中的这一列会自动的变成当前保存数据时的时间。
主键约束:primary key
唯一约束,unique
非空约束,not null
数据记录的删除操作
语法:delete from 表名 where条件语句
数据库表删除:
语法:drop table 表名;
向数据表插入数据:
语法:insert into 表名 (列名,列名,列名......) values (值,值,值......);
数据记录修改操作:
语法: update 表名 set 列名=值,列名=值.... [ where条件语句 ];
对查询的结果进行排序:
使用order by 子句排序查询结果。
语法:select * from 表名 order by 列名 asc|desc ;
asc是升序排列,desc是降序排列
别名:可以对查询出来的列名 起别名。
语法:select 列名 as 别名,列名 as 别名,列名 as 别名.... from 表名 where 条件;
注意:在使用别名的时候,as 关键字可以省略。
运算符:
1) 相等= 不等 <>
2) 区间:between ...and... 在两者之间取值 between 70 and 80
等价于 >=70 并且<=80 注意前面那个数要比后面那个数要小
sage >=24 and sage<=50 between 24 and 50
3) in(值,值,值) 在指定值中任取一个 in(70,80,90) 值可以是70、80或者90
where 列名 in (值,值,值.......);
where 列名=值 or 列名=值 or 列名=值 .......
4) like '模糊查询pattern' 进行模糊查询 ,表达式有两个占位符 % 任意字符串 _ 任意单个字符
例如: name like '张%' 所有姓张学员 %张%
name like '张_' 所有姓张名字为两个字学员 _张_
5) is null 判断该列值为空
sql中对伊null的判断,不能写 = null 在sql 中 null = null 结果不成立。
正确格式:is null
不是null : is not null
6) and 逻辑与 or 逻辑或 not 逻辑非
SQL中的函数
SQL语言中定义了部分的函数,可以帮助我们完成对查询结果的计算操作:
count 统计个数(行数)
sum函数:求和
avg函数:求平均值
max、min 求最大值和最小值
count函数:
语法:select count(*)|count(列名) from 表名
注意: count在根据指定的列统计的时候,如果这一列中有null 不会被统计在其中。
sum函数:
语法:select sum(列名) from 表名;
注意事项:
1、如果使用sum 多列进行求和的时候,如果某一列中的有null,这一列所在的行中的其他数据不会被加到总和。
2、可以使用mysql 数据库提供的函数 ifnull(列名,值)
3、在数据库中定义double类型数据,是一个近似值,需要确定准确的位数,这时可以把这一列设计成numeric类型。numeric(数据的总列数,小数位数)
numeric double float
avg函数:
语法: select avg(列名) from 表名;
max,min函数:
Max/min函数返回满足where条件的一列的最大/最小值
group by分组函数
语法:select … from … group by 列名,列名
分组: 按照某一列或者某几列。把相同的数据,进行合并输出。
目的:仍然是统计使用。
使用group by 子句对列进行分组
group by 它可以根据指定列对数据进行归类。如果这一列中有重复的数据会被合并成一个。
注意事项:
1、聚集函数:分组之后进行计算;
2、通常 select的内容:a 被分组的列,b 函数。
3、如果遇到这种情况 按照 每种,每个。 类似的这些语句的时候,通常会使用分组。
4、如果使用group by 对数据进行分组之后还要过滤。这时一般不能使用where,因为where关键字的后面不能跟上面讲解的这些函数。如果需要在过滤的条件中加上述的函数,只能使用having关键字。
5、where 后不能跟 聚合函数,having中可以跟 聚合函数。
where和having 都可以完成数据的条件书写。但是having后面可以跟上述的函数。
例:select product,sum(price) from orders group by product;
select product,sum(price) from orders group by product having sum(price)>100;
注意事项:
1、值与列一一对应。并且有多少个列,需要写多个值。如果某一个列没有值。可以使用null。表示插入空。
2、值的数据类型,与列被定义的数据类型要相匹配。并且值得长度。不能够超多定义的列的长度。
3、字符串类型:插入字符类型的数据,必须英文的单引号括起来。在mysql中。
4、date 时间类型:也必须用英文的单引号括起来,如 ‘yyyyMMdd’ ,’yyyy-MM-dd’,’yyyy/MM/dd’ 。5、在插入数据的时候,如果某些列可以为null,或者是自动增长的列,或者有默认值的,在插入的时候可以省略。
6、如果给表中的所有列插入数据,这时可以省略表名后面的列名,直接写values
库的操作
创建库:create database 库名 character set 编码表 collate 排序规则;
删除库:drop database 库名;
查询库:show databases;
查看库的编码表:show create database 库名;
更改库:use 库名;
查看当前正在使用的库:select database();
修改库的编码表:alter database 库名 character set 编码表 collate 排序规则;
表本身的操作
创建表:create table 表名( 列名 列的类型(长度) 类的约束 ,列名 列的类型(长度) 类的约束...... );
删除表:drop table 表名;
查询表:show tables;
查看表的结构:desc 表名;
查看表的编码表:show create table 表名;
修改表:alter table 表名 增/删/改 列名 列的类型(长度) 约束;
add/drop/change/modify
修改表名:rename table 旧表名 to 新表名;
表中数据的操作
增:insert into 表名(列名) values(值);
删:delete from 表名 where 条件; truncate
改:update 表名 set 列名=值 ,列名=值 where 条件 ;
查:select 列名 as 别名 ,列名 as 别名。。。。 from 表名 where 条件;