1.导出
2.导入
2.1.创建对应的数据库并切换到该数据库
2.2.把sql文件拖入到相应的数据库表名处。
2.查询
2.1.准备数据
use mydb;
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '学生表的主键列',
`name` varchar(255) ,
`age` int(11) ,
`address` varchar(255),
PRIMARY KEY (`id`) USING BTREE
) ;
-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES (1, '张三', 18, '北京');
INSERT INTO `student` VALUES (2, '李四', 19, '北京');
INSERT INTO `student` VALUES (3, '王五', 19, '北京');
INSERT INTO `student` VALUES (4, '钱七', 19, '北京');
INSERT INTO `student` VALUES (5, '关羽', 25, '南京');
INSERT INTO `student` VALUES (6, '张飞', 25, '南京');
INSERT INTO `student` VALUES (7, '赵云', 28, '南京');
INSERT INTO `student` VALUES (8, '项羽', 19, '南京');
INSERT INTO `student` VALUES (9, '刘备', 30, '上海');
INSERT INTO `student` VALUES (10, '曹操', 40, '许昌');
INSERT INTO `student` VALUES (11, '夏侯', 36, '许昌');
INSERT INTO `student` VALUES (12, '诸葛亮', 38, '上海');
INSERT INTO `student` VALUES (13, '周瑜', 78, '江东');
INSERT INTO `student` VALUES (14, '小乔', 56, '江东');
INSERT INTO `student` VALUES (15, '孙尚香', 59, '江东');
2.2.基础查询
-- 查询表中的所有记录 * 表示统配,所有的列,但会导致索引失效
select * from student;
-- 查询表中的所有记录 列出每个列名
select id,name,age,address from student;
-- 查询部分列 查询到的结果放在一个临时表中
select name,age from student;
-- 赋予查询到的列名 别名 as 可以省略
select name as 姓名,age 年龄 from student;
2.3.去除重复值
-- 去重复值,要求查询的所有列值 都必须相同时。
select distinct address from student;
2.4.条件查询
-- 条件查询
-- 判断查询
select * from student where age>=25;
select * from student where age!=25;
select * from student where age<=25;
-- 多条件查询
select * from student where age>25 and address='许昌';
select * from student where age >30 or address='上海';
-- 范围语句
select * from student where age >=30 and age<=40;
-- between 二者之间
select * from student where age between 30 and 40;
-- 查询年龄是 20,25,30,45,55的人
select * from student where age in(20,25,30,45,55);
-- 模糊查询 like
-- 通配符 _ 通配一个字符 % 通配n个字符
-- 查询名字中第二个字符为三的人
select * from student where name like '_三';
-- 查询姓李的人
select * from student where name like '李%';
2.5.排序查询
-- 排序查询 order by 列名 desc:降序
select * from student order by age;-- 升序
-- 多列进行排序年龄按照降序 id按照升序
select * from student order by age desc,id ;
-- 同时存在 where 与 order by 时,where 在前 order by 在后
select * from student where age>25 order by age;
2.6.查询列上进行运算。
select age,name from t_student;
select age*3,name from t_student;
-- 有了这个特性 就可以在设计数据库表的时候 如果有些值可以通过多列运算出来 此时就没有必要设计了。
-- 比如: 订单表
-- 订单号 订单的价格 订单的数量 订单的总价
-- 在实际开发中订单的总价可以通过订单的价格*订单的数量计算出来 那么就没有必要再数据库中再定义订单总价这列。
create table t_order(
orderno int primary key,
name varchar(20),
price DECIMAL(7,2),
num int
-- total decimal(7,2) -- 这里没有必要再定义总价因为
)
select orderno,name,price,num,price*num total from t_order;
2.7.聚合函数
-- SQL 结构化查询语言 也是一种编程语言,所以也有函数 并且有 内置函数(官方) 和自定义函数(程序员)
-- count(列名) count(1)表中第1列但是它不能使用distinct去重 count(*)表中所有列 统计记录条数 这三个的区别
select count(distinct name),count(2),count(*) from t_student;
-- 聚合函数总共有5个:
-- max(列名):求某列的最大值。
-- min(列名):求某列的最小值。
-- sum(列名):求某列的和
-- avg(列名):求某列的平均值
-- count(列名):求某列的个数。
-- 求最大的年龄
select max(age) from t_student;
-- 求最小的年龄
select min(age) from t_student;
-- 求年龄的和
select sum(age) from t_student;
-- 求学生的个数.
select count(id) from t_student;
-- 求年龄平局值
select avg(age) from t_student;
2.8.分组查询
-- 在sql中有个 group by 语句 将某一列相同数据 视为一组 然后进行查询 与聚合函数连用。
-- 求各个地区的人数
select count(*),address from t_student group by address;
-- 查询 各个地区的平均年龄
select avg(age),address from t_student group by address;
-- 可以使用 having 对分组进行条件检索。
-- 查询 平均年龄大于30的地区人数
select address,count(*),avg(age) from t_student group by address having avg(age)>30;
-- 查询 最大值小于30 的地区 人数 和 平均年龄
select address,count(*),avg(age),max(age) from t_student group by address having max(age)<30;
-- 查询 人数大于3的地区 最大年龄
-- 查询每个地区 25岁以上人数的数量
select address,count(*) from t_student where age>25 group by address;
注意: 若使用了group by 那么select后只能根分组的条件列和聚合函数。
select id,address,count(*),avg(age),max(age) from t_student group by address having max(age)<30;
这种是错误的,因为select后跟了id 而id不是分组的条件。
2.9.分页查询
-- 当数据库表数据量比较大 例如: 1000w行数据 如果我们执行 select * from student 此时有可能数据库卡死 -- 拿出1000w数据到内存里,你的内存可能会不够。导致电脑卡死。
-- 如果在java中 有可能内存直接溢出 所以实际开发中 都是分页查询 (部门查询)
-- 分页使用: limit
select * from student limit 3,5; //从第3条记录查询 查询5条
select * from t_student limit 3,5; -- 从第三条记录查询 查询5条记录。
select * from t_student limit 0,5; -- 从第0条记录查询 查询5条记录。
--- 分页:
select * from 表名 limit (n-1)*m,m; -- 查询第n页得m条记录。
--- n表示页码 m:表示每页得条数,
第1页每页显示5条记录: select * from t_student limit 0,5;
第2页每页显示5条记录: select * from t_student limit 5,5;
第3页每页显示5条记录: select * from t_student limit 10,5;
第4页每页显示5条记录: select * from t_student limit 15,5;
3.SQL的优先级
sql语法:
select distinct * from 表名
where 条件
group by 分组
having 分组条件
order by 排序
limit 分页。
上面为他得语法结构。顺序不能乱。
mysql执行引擎:执行得顺序。
select name as n,age as a from t_student where a>15;
运行结果
因为再执行where时,还没有执行select 所以电脑不知道名字为a的。