mysql知识点

数据保存在内存:
优点: 存取速度快
缺点: 数据不能永远保存!!!
数据保存在文件:
优点: 数据永远保存!!!
缺点:
1)速度比内存操作慢,频繁的IO操作。
2)查询数据不方便
数据保存在软件:
1)数据永远保存!!!
2)速度比较快
3)查询和管理数据方便
数据库软件可以实现以上的功能

– 创建数据库

– 1.1. 管理数据库
CREATE DATABASE day15;
SHOW DATABASE;
USE day15;
CREATE TABLE student(
id INT,
NAME VARCHAR(20),
age INT

);
– 查看表
SHOW TABLES ;
– 管理数据
– 需求,往学生表里插入字段(insert)
INSERT INTO student VALUES (1,’张三’,20);
– 插入部分字段
INSERT INTO student(id,NAME)VALUE(2,’李四’);
– 修改数据(update)
– 这是一种批量操作,不是经常使用
UPDATE student SET NAME=’张三’;
– 按照条件修改
– 修改id为2 的学生的姓名
UPDATE student SET NAME=’李四’ WHERE id=2;

– 修改姓名和年龄 id为1的
UPDATE student SET NAME =’王五’,age=30 WHERE id=1;

– 1.3删除数据(delete from)
DELETE FROM student WHERE id=1;
– 1)truncate table也可以实现删表
TRUNCATE TABLE FROM student;
SELECT * FROM student;
– delete from和truncate 区别
– 1)delete可以按条件删除 truncate只能全部删除
– 2)delete 删除的数据可以回滚,truncate不能
– 3)delete from不可以把自增长的约束重置,就是id值删除之后再插入新的不会重置,truncate能

– 1.4 查看所有数据(重点)
– 1)查询所有字段
SELECT*FROM student;
– 2) 查询指定字段
SELECT id,NAME FROM student;

– 3)查询时指定别名
SELECT id AS ‘编号’,NAME AS ‘姓名’ FROM student;
– as可以省略
SELECT id ‘编号’,NAME ‘姓名’ FROM student;

– 4) 查询时可以添加常量列
– 需求 :查询学生数据时加一个’年龄’列,值为java班
SELECT id AS ‘编号’,NAME AS ‘姓名’,’java班’ AS ‘班级’FROM student;

– 5)查询时合并列

INSERT INTO student VALUES (1,’张三’,20,30,50);
INSERT INTO student VALUES (2,’李四’,10,50,70);
– 添加两列
ALTER TABLE student ADD COLUMN serlet INT;
ALTER TABLE student ADD COLUMN mysql INT;

UPDATE student SET serlet =75,mysql =90 WHERE id=1;
UPDATE student SET serlet =65,mysql =30 WHERE id=2;
– 添加一个地址字段
ALTER TABLE student ADD COLUMN address VARCHAR(20);
UPDATE student SET address=’河北三河’ WHERE id=1;
UPDATE student SET address=’北京’ WHERE id=2;
INSERT INTO student VALUES(3,’王五’,30,99,44,’河北三河’);

– 需求 查询每个学生的总分.
SELECT NAME AS ‘姓名’,(serlet+mysql) AS’总成绩’ FROM student;
– 注意 合并列的字段必须是数值类型的字段

– 6)查询去除重复记录(distinct)
– 需求:查询有哪些地区的学生
SELECT DISTINCT address FROM student;
– 另一种语法
SELECT DISTINCT (address) FROM student;
– 7) 条件查询(where)
– 1.逻辑条件 and or
– 需求;查询学生id为1,姓名为张三的学生(交集)
SELECT * FROM student WHERE id=1 AND NAME=’张三’;
– 查询id为2 或者姓名为张三(并集)
SELECT * FROM student WHERE id=2 OR NAME =’张三’;

– 2.比较条件 > < >= <= = <> (between and)
– 需求:查询servlet分数大于80的
SELECT *FROM student WHERE serlet>80;
SELECT * FROM student WHERE mysql<=70;
– 需求:servlet大于等于80;且小于90
SELECT * FROM student WHERE serlet>=60 AND serlet<=90
– 代替
SELECT * FROM student WHERE serlet BETWEEN 60 AND 90;– 在什么之间 和上面一样,包括头和尾
– 需求 查询年龄不等于20的学生
SELECT * FROM student WHERE age<>20;

– 3.判空条件: is null, is not null, =” <>”
– null:表示没有数据 is null is not null
– 空字符串 :有数据,
– 需求:查询没有性别数据的学生
SELECT * FROM student WHERE gender IS NULL OR gender=”;
ALTER TABLE student ADD COLUMN gender VARCHAR(2);
– 需求 :查询有性别数据的学生
SELECT * FROM student WHERE gender IS NOT NULL AND gender<>”;

– 4.模糊条件: like
– 模糊替代符合
– % 替代任意个字符
– _ 替代一个字符
– 需求 查询姓李的学生
SELECT * FROM student WHERE NAME LIKE ‘李%’;
– 需求 ;姓名中包含四个字的
SELECT * FROM student WHERE NAME LIKE ‘%四%’;– 姓名里包含四的
– 需求:查询姓李,但是全名只有两个字
SELECT * FROM student WHERE NAME LIKE ‘李_’;

SELECT *FROM student;
– ———————————————————–下面是练习—————————————————————————————
– 1.创建一个员工表
字段 属性
id 整形
NAME 字符串(长度为20)
gender 字符串(长度为2)
birthday 日期型(DATE)
email 字符串(长度为10)
remark 字符串(长度为50)

2.修改表练习
2.1 在员工表基础上增加age列
2.2 修改email列长度为50
2.3 删除remark列
2.4 列名NAME修改为username

3.在员工表上练习数据的增删改操作

4.查询操作练习(在学生表数据基础上:student.sql)
查询表中所有学生的信息。
查询表中所有学生的姓名和对应的英语成绩。
过滤表中英语成绩的重复数据
使用别名表示学生分数。

查询姓名为李一的学生成绩
查询英语成绩大于等于90分的同学
查询总分大于200分的所有同学
查询所有姓李的学生英语成绩。
查询英语>80或者总分>200的同学

统计每个学生的总分。
在所有学生总分数上加10分特长分。 -- 

CREATE TABLE student1(
id INT,
NAME VARCHAR(20),
chinese FLOAT,
english FLOAT,
math FLOAT
);

INSERT INTO student1(id,NAME,chinese,english,math) VALUES(1,’张小明’,89,78,90);
INSERT INTO student1(id,NAME,chinese,english,math) VALUES(2,’李进’,67,53,95);
INSERT INTO student1(id,NAME,chinese,english,math) VALUES(3,’王五’,87,78,77);
INSERT INTO student1(id,NAME,chinese,english,math) VALUES(4,’李一’,88,98,92);
INSERT INTO student1(id,NAME,chinese,english,math) VALUES(5,’李来财’,82,84,67);
INSERT INTO student1(id,NAME,chinese,english,math) VALUES(6,’张进宝’,55,85,45);
INSERT INTO student1(id,NAME,chinese,english,math) VALUES(7,’黄蓉’,75,65,30);
ALTER TABLE student1 ADD COLUMN gender VARCHAR(20);

– 查询表中所有学生的信息。
SELECT*FROM student1;
UPDATE student1 SET gender=’男’ WHERE id=1;
DELETE FROM student1;
– 查询表中所有学生的姓名和对应的英语成绩。
SELECT NAME,english FROM student1;
– 过滤表中英语成绩的重复数据(去重一般不加别的字段)
SELECT DISTINCT english FROM student1;
– 使用别名表示学生分数。
SELECT NAME,english AS ‘英语’ ,chinese AS ‘语文’,math AS ‘数学’ FROM student1;
– 查询姓名为李一的学生成绩
SELECT*FROM student1 WHERE NAME=’李一’;
– 查询英语成绩大于等于90分的同学
SELECT NAME,english FROM student1 WHERE english >=90;
SELECT * FROM student1 WHERE english >=90;
– 查询总分大于200分的所有同学
SELECT NAME, (chinese+math+english) AS ‘总分’ FROM student1 WHERE (chinese+math+english)>200;
SELECT * FROM student1 WHERE (chinese+math+english)>200;

– 查询所有姓李的学生英语成绩。
SELECT NAME,english FROM student1 WHERE NAME LIKE ‘李%’;
– 查询英语>80或者总分>200的同学

SELECT NAME,english,(chinese+math+english) AS ‘总分’ FROM student1 WHERE english >80 OR ‘总分’>200 ;
SELECT * FROM student1 WHERE english >80 OR ‘总分’>200 ;
– 统计每个学生的总分.
SELECT NAME,(chinese+math+english)AS ‘总分’ FROM student1;
– 在所有学生总分数上加10分特长分
SELECT NAME,(chinese+math+english+10)AS ‘总分’ FROM student1;

– 3.8聚合查询 用于统计结果
– max() min() avg() count()
– 需求 查询serlet最高分
SELECT MAX(math) FROM student1;
SELECT MIN(math) FROM student1;
– 查询平均分
SELECT AVG(english) FROM student1;
– 查询当前有几个学生
SELECT COUNT(*)FROM student1;
– 统计有值的id字段的数量(排除掉null的数据)
– 使用count统计时,不要使用存在null的字段
SELECT COUNT(id) FROM student1;

– 3.9 分页查询(limit) limit 起始行数,查询的行数 起始行数从0开始
– 需求 :学生一共20条数据,要每页显示5条 共4页,看第三页(11-15)的数据
SELECT * FROM student1 LIMIT 10,5;

– 需求:只想要第一条和第二条数据 必须是连续的
SELECT * FROM student1 LIMIT 0,2;
– 需求:只想要第3条和第4条数据
SELECT * FROM student1 LIMIT 2,2;
– 总结;查询当前页的数据sql:select * from student1 limit (当前页码-1)*每页显示的条数,每页的条数

SELECT * FROM student1;

– 3.10 查询后排序(order by)
– desc :降序 数值从大到小 字母 z-a 识别中文有问题
– asc:升序
– 默认情况下是按照插入顺序排序
SELECT * FROM studnet1;
– 按照id升序
SELECT * FROM student1 ORDER BY id ASC;– order by默认是升序
– 按照id 降序
SELECT * FROM student1 ORDER BY id DESC;
– 按照English升序, id降序 (先入为主)
SELECT * FROM student1 ORDER BY english ASC,id DESC;
– 姓名升序
SELECT * FROM student1 ORDER BY NAME DESC;

– 3.11 分组查询(group by)
– 需求:查询出男女各有多少人
– 1)对地区进行分组 2)在分组的基础上进行统计,统计的是每组的数据
SELECT gender,COUNT(*) FROM student1 GROUP BY gender;
– 3.12 分组后筛选 (having)
– 需求:查出哪个性别的人数是大于3个姓名
– 1)查询哪些性别大于3人, 2)筛选出姓名
– 注意:having是用在group by分组之后 对分组后的数据进行筛选
SELECT NAME,COUNT() FROM student1 GROUP BY gender HAVING COUNT()>3 ;

– 字段类型
– char(20) vs varchar(20)
– char(20)固定长度得到字符串 不管实际存储数据的大小
– varchar(20) :可变长度字符串,根据实际存储数据占用空间来改变大小
– int vs int(4)
– int默认长度11位,长度是根据实际存储测数值的长度
– int(4) 固定的数组长度

– date vs datetime vs timestamp
– date;日期
– datetime:日期+时间
– timestamp 时间戳
CREATE TABLE test_date(
date1 DATE,
date2 DATETIME,
date3 TIMESTAMP – 这个会默认的添加当前的时间,用来记录当前插入或者更新的时间
)
INSERT INTO test_date (date1,date2) VALUES(‘2018-08-02 17:52:51’,’2018-08-02 17:52:51’);
SELECT * FROM test_date;

删除表:droptables
显示表:SHOW TABLES/DESC 表
管理数据:
inseret INTO
UPDATE SET
DELETE from
原理图

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值