sql 数据类型 好处更多的数据存储方案 存储更加灵活
数值:int(11)
bigint(20) 大数据类型相当于Java的long类型
decimal(浮点数据类型) 可以定义大小与保留后几位小数 decimal(20,3)
字符类型:char(10)
varchar(3000)最常用字符类型 一定要定义大小
text 超文本类型 可以存储文本 不建议使用 不好优化、 数据太大不建议存储到数据库当中
时间:datetime 最常用数据类型 包括年月日时分秒
date、time、year
其他:enum 枚举 bit(0和1) boolean(true、fales)
创建数据命令:drop database 数据库名称;
创建数据库表命令:CREATE TABLE 名称(列说明,列说明,列说明)
列名
数据类型
属性: not null (不能为空)
null (为空)
default (默认值)
primary key (主键)
AUTO_INCREMENT 自动增长 缺点需要排队执行效率提不上去
一张表需要有一个主键:好处方便检索,检索速度快、因为主键具有唯一性
INSERT(插入数据)
语法 INSERT INTO 表[(列名,列名)] VALUES(值,值,值,值)
INSERT INTO student VALUES(1,'张三','北京海淀区')
UPDATE(修改数据)
注意事项:所有的修改中的条件判断、与修改 都是用sql修改
不要用逻辑将对象查出来 拿这对象修改、因为存在万一数据库有人修改、那你的数据还是没改的数据
语法:UPDATE 表 SET 列=值,列=值,列=值 条件
UPDATE user2 SET uid=uid+100 where uid>10
条件WHERE:
行级操作的,它每操作一行都会询问你,是否允许操作(= > < >= <=,<> != 这个两个都是不等于 )
AND OR NOT 的的意思 意思两个条件必须都满足
UPDATE USER2 SET USERNAME='小萝卜头' WHERE uid>=950 AND uid <960 AND username!='a'
select查询:
select [列名 可以有多个列] from [表名] where [查询条件 可以有多个条件]
分页查询: 数据大了不可能全部读取上来只能选择读上来一部分
SELECT * FROM user2 LIMIT 0,5
LIMIT 分页关键字 第一个参数从第几行开始、第二个参数每次读几行
排序查询:
order by 排序关键字 这个要注意 要在where 后面写、再在limit前面 写在分页前面
DESC 降序 从打到小 ASC 升序(在关键后面写) 、order by desc(这句话的意思是:排序按照降序)
select*from stu where sname='小明' order by uid DESC limit 0,5 uid(按照哪一个列进行排序,这里是按照uid查询 条件自定选择)
聚合函数:(可以帮我们做一些运算、帮助我们的开发)
count 统计总行数
select count(*) from stu; 统计这个表共有多少行
select count(sid) from stu; 统计下sid这个行共有多少个
select count(*) from stu where mm>=15; 查询这个表 将满足这个条件的列 统计下共有多好行
avg 数值列 统计这个列的平均值 SELECT AVG(uid) FROM user2
sum 数值列 统计这个列的总和 SELECT SUM(uid) FROM user2
max 数值列 找到这个列中的最大值 SELECT MAX(uid) FROM user2
min 数值列 找到这个列中的最小值 SELECT MIN(uid) FROM user2
分组查询:
GROUP BY 把相同的列在一组 、再查看列的时候只能写分组的那个列、聚合函数与分组在一起只是统计这一组的数据
SELECT xiangmu FROM cba GROUP BY xiangmu ; \\将 xiangmu有关的列合并起来
SELECT address FROM student GROUP BY address ; \\将 address有关的列合并起来
SELECT xiangmu,COUNT(*) FROM cba WHERE duiwu='新疆' GROUP BY xiangmu ORDER BY COUNT(*) DESC
这句的意思 查询cba 将姓名相同的列合并起来 统计共有多少行 条件是duiwu='新疆' 按照生效
子查询:以里面的查询为条件
SELECT * FROM tiezi WHERE yhid=(SELECT yhid FROM yonghu WHERE nicheng='阿朗')
子查询可以用in查询多个:不建议使用查询效率高不起来
select * from table where sid in(1,2,34,45,5,4)
模糊查询 like 模糊查询关键字 模糊查询效率高不起来
SELECT * FROM tiezi WHERE biaoti LIKE '%123%' 只要含有123的都查询出来
凯% 只要含有凯开头就可以
%凯% 只要字符里面还有凯字样就行
%java%凯% 有这两个关键字都查询出来
UNION 记录集合并 适合将不同的表和在一起将记录做成一张表
UNION ALL 重复记录也合并
UNION 去除重复记录
SELECT sid,sname,address,age,cid FROM student
UNION UNION
SELECT cid,cname,NULL,NULL,NULL FROM cls
表联查
SELECT * FROM 表 连接方式 表 ... ON 连接条件 WHERE 记录过滤条件 ORDER BY 排序 LIMIT 0,1
问题
连接查询,肯定会出现重复列,在数据库中没有问题,在代码开发中会出现重复列错误
SELECT * FROM student
INNER JOIN cls
INNER JOIN room
INNER JOIN banzhuren
ON student.`cid`=cls.`cid` AND cls.`rid`=room.`rid`
AND cls.`bid`=banzhuren.`bid`