数据的查询
-- 创建数据
CREATE DATABASE day2;
-- 使用数据库
USE day2;
-- 创建一个表格
CREATE TABLE stu(
id INT,
NAME VARCHAR(20),
sex VARCHAR(2),
age INT ,
address VARCHAR(30)
);
-- 查看表格的结构
DESC stu;
-- 添加列
ALTER TABLE stu ADD java INT;
ALTER TABLE stu ADD jsp INT
INSERT INTO stu (id,NAME,sex,age,address,java,jsp) VALUES(1,'小明','男',25,'山东2',78,99);
INSERT INTO stu (id,NAME,sex,age,address,java,jsp) VALUES(2,'小黄','男',23,'河南',65,55);
INSERT INTO stu (id,NAME,sex,age,address,java,jsp) VALUES(2,'小黄','女',23,'太远',65,55);
INSERT INTO stu (id,NAME,sex,age,address,java,jsp) VALUES(4,'小黄','女',23,'太远',45,85);
INSERT INTO stu (id,NAME,sex,age,address,java,jsp) VALUES(NULL,NULL,'',23,'太远',45,85);
DELETE FROM stu;
-- 1 查询所有的类
SELECT * FROM stu;
-- 2. 查询指定的列
SELECT id,NAME,sex FROM stu;
-- 3.查询的时候增常量列
SELECT id,NAME,sex,address, 'java2版' FROM stu;
-- 4.查询的时候起一个别名
SELECT id AS '编号' ,NAME AS'姓名',sex AS '姓别','java1版' AS '班级' FROM stu;
-- 5.查询的时候进行合并指定的列
-- 需求 : 在查询每个学生的java和jsp总成绩
SELECT id,NAME,sex,age,address, (java+jsp) AS '总成绩' FROM stu;
-- 在合并的时候 合并的只能进行数字类型
SELECT id ,NAME,sex ,(address+sex) AS '总' FROM stu;
-- 6 查询时去除重复的记录
-- 查询学生的性别 男 女
SELECT DISTINCT sex FROM stu;
-- 7 条件查询 where
-- 逻辑条件 and(与 和) or(或者)
-- 需求 查询 id为1 或者性别为女
SELECT id,NAME,sex,age,address,java,jsp FROM stu WHERE id=1 OR sex='女';
-- 需求 查询 id 为 1 并且性别为男 信息
SELECT id,NAME,sex,address,java,age FROM stu WHERE id=1 AND sex='男';
-- 比较条件 > < >= <= =(等于) <>(不等于) between ...and... 等价于 》= and <=)
-- 查询所有的java成绩大于65的是、学生信息
SELECT * FROM stu WHERE java>=65;
-- 查询java成绩大于等于65 并且小于等于75
SELECT * FROM stu WHERE java>=65 AND java<=75;
-- 另外一种写法
SELECT * FROM stu WHERE java BETWEEN 65 AND 75
-- 查询java不等于65
SELECT *FROM stu WHERE java<>65;
-- 判空查询 is null not null =”“ 《》”“
-- 需求: 查询姓名为空信息 (空 包括null ="")
SELECT * FROM stu WHERE NAME IS NULL OR NAME='';
-- 求出性别不为空字符的
SELECT * FROM stu WHERE sex <>'' OR NOT NULL;
-- 模糊查询
-- like
-- % 匹配任意字符
-- _匹配一个字符
-- 查询姓名为 ‘小’学生信息
SELECT * FROM stu WHERE NAME LIKE '小%';
-- 查询姓名为'小 '且小的后面只有一个字符
SELECT * FROM stu WHERE NAME LIKE '小_';
-- 8 聚合查询 (使用聚合函数的查询)
-- 常用的函数 sum() avg() max() min() count()
-- 求出java的成绩
SELECT SUM(java) AS 'java总成绩' FROM stu;
-- 求出java的平均分
SELECT AVG(java) AS'平均分' FROM stu;
-- 求出最高分
SELECT MAX(java) AS '最高分' FROM stu;
-- 统计出一共有多少条记录 cont(字段) 不包括null元素
SELECT COUNT(*) FROM stu;
-- 9 分页查询 limit
-- 起始行 从0开始进行数
-- 每页显示多少条记录 (当前页-1)*每页显示的记录数
-- 查询1.2 条记录 一页显示两条记录
-- 查询的是第一页数据
SELECT * FROM stu LIMIT 0,2
-- 查询第二页
SELECT * FROM stu LIMIT 2,2
-- 查询第三页
SELECT * FROM stu LIMIT 4,2;
-- 查询第四页
SELECT * FROM stu LIMIT 6,2
-- 10 排序查询
-- order by
-- asc 正序 升序
-- desc 倒序
-- 默认的情况下时按照数据插入的顺序来进行查询的
-- 需求 java成绩按照从低到高进行查询
SELECT * FROM stu ORDER BY java ASC;
-- 需求 jsp的成绩重高到低进行排序
SELECT * FROM stu ORDER BY jsp DESC;
-- 多种排序方式进行查询
-- jaba 按照正序进行 jsp按照反序
SELECT * FROM stu ORDER BY java ASC ,jsp DESC;
-- 11 分组查询
-- group by
-- 查询男女”“ 的人数
-- 男 2
-- 女 2
-- ”“ 2
SELECT sex,COUNT(*) FROM stu GROUP BY sex;
-- 12 分组之后 进行刷选
-- 查询总人数大于3个的性别 分组之后 不能使where 使用having
SELECT sex ,COUNT(*) FROM stu GROUP BY sex HAVING COUNT(*)>=3;
SELECT * FROM stu;
-- 数据的约束
-- 默认值 当用户使用默认值的字段不插入数据的时候 就是用默认值
-- 对默认值字段插入数据的时候 null是可以插入
CREATE TABLE emp(
id INT,
NAME VARCHAR(20),
address VARCHAR(10) DEFAULT '河南省周口市'
)
INSERT INTO emp VALUES(1,'小明','');
SELECT * FROM emp;
DROP TABLE emp;
-- 非空 空 ‘’
-- 限制字段必须要有值 字段必须要有数据 不能查入null值
CREATE TABLE student(
id INT NOT NULL,
NAME VARCHAR(20)
);
INSERT INTO student VALUES ('','小黄');
SELECT * FROM student;
DROP TABLE student;
-- 唯一
-- 唯一可以插入null元素 可以插入null元素
CREATE TABLE stu1(
id INT UNIQUE,-- 唯一
NAME VARCHAR(20));
INSERT INTO stu1 VALUES(1,'zhangsan');
INSERT INTO stu1 VALUES(NULL ,'lis');
SELECT * FROM stu1;
DROP TABLE stu1;
-- 主键
-- 非空+唯一性
-- 通常情况下 每一张表都会设置一个字段 为主键 用来表示表的每条记录都唯一的
CREATE TABLE stu2(
id INT PRIMARY KEY,-- 主键
NAME VARCHAR(20));
INSERT INTO stu2 VALUES (1,'wangwu');-- 违反了字段的唯一性Duplicate entry '1' for key 'PRIMARY'
SELECT * FROM stu2;
INSERT INTO stu2 VALUES(NULL,'lisi');-- 违反了字段的非空约束 Column 'id' cannot be null
-- 自增长
-- 字段不用进行赋值 可以自动的增加 每次增加1
CREATE TABLE stu3(
id INT PRIMARY KEY AUTO_INCREMENT, -- 自增长 从0开始
NAME VARCHAR(10)
)
DROP TABLE stu3;
INSERT INTO stu3 (NAME)VALUES('小黄');
SELECT * FROM stu3
DELETE FROM stu3;
--
TRUNCATE TABLE stu3;
-- 外键
-- 当用有两种表的使用进行约束数据
-- 创建一个部门表
-- 数据冗余比较高的时候 使用外键 表与有关系
-- (主表)
CREATE TABLE dept(
id INT PRIMARY KEY AUTO_INCREMENT,
deptname VARCHAR(30)
)
DROP TABLE dept;
INSERT INTO dept(deptname) VALUES('技术部');
INSERT INTO dept(deptname) VALUES('财务部');
INSERT INTO dept(deptname) VALUES('秘书部');
INSERT INTO dept(deptname)VALUES('人事部')
SELECT * FROM id=7 WHERE id=3;
SELECT * FROM dept;
-- 员工表
-- (副表)
CREATE TABLE employee (
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20),
deptid INT,
-- 声明一个外键
-- 外键名称 -- 外键 --参考主表(字段)
CONSTRAINT employee_dept_fk FOREIGN KEY (deptid) REFERENCES dept(id)
);
DROP TABLE employee
INSERT INTO employee (NAME,deptid) VALUES('张三','1');
INSERT INTO employee (NAME,deptid) VALUES('李四','3');
INSERT INTO employee (NAME,deptid) VALUES('王五','2');
INSERT INTO employee(NAME,deptid)VALUES('赵六',5);
UPDATE employee SET deptid=3 WHERE id=1;
SELECT * FROM employee;
-- 在副表当中创建外键
-- 被约束的表成为副表 约束别人的表被成为主表
-- 主表的参考字段一般情况下都是主键
-- 添加数据 : 先添加主表 ,在添加副表
-- 修改数据 ” 先修改副表 在修改主表
-- 删除数据 先删除副表 在删除主表
-- 级联操作 级联查询 jdbc html

浙公网安备 33010602011771号