Ø 插入记录: * 插入某几列的值: * insert into employee (eid,ename,email) values (null,'aaa','aaa@itcast.cn'); * 插入所有列的值: * insert into employee values (null,'bbb','bbb@itcast.cn','1990-09-01','HR','I am HR'); Ø 插入中文: insert into employee (eid,ename,email) values (null,'张三','aaa@163.cn'); ERROR 1366 (HY000): Incorrect string value: '\xD5\xC5\xC8\xFD' for column 'ename' at row 1 ***** 插入中文问题的解决: * show variables like '%character%';
C:/Users/%E9%99%88%E6%B4%8B/AppData/Local/YNote/data/qq6C1F80BFC2D36C256C4E179EA0631FAE/1fa17cedb60b47a3a2a6571664c3c760/ip_image002.jpeg ***** 找到MYSQL的安装路径/my.ini文件:
C:/Users/%E9%99%88%E6%B4%8B/AppData/Local/YNote/data/qq6C1F80BFC2D36C256C4E179EA0631FAE/8cb7dadf675345218ef4d45aad5cdca5/ip_image004.jpeg **** 重新加载mysql的配置文件: * services.msc * 停止mysql的服务,重新启动mysql服务. * 执行之前的SQL语句. 【删除记录】 Ø 语法: * delete from 表 [where 条件]; Ø 注意事项: * 删除表中的一行记录,不能删除某列值 * 如果没有条件删除表中的所有列. Ø 练习: * 删除id为8的记录: * delete from employee where eid = 8; * 删除所有记录: * delete from employee; Ø 删除表中的所有记录truncate table 表名 和 delete from 表 区别? * 区别: * truncate table 删除表的记录:将整个表删除掉,重新创建一个新的表.truncate属于DDL. * delete from 删除表的记录:一条 一条进行删除. delete属于DML。 * 事务管理 只能作用在DML语句上.如果再一个事务中使用delete删除所有记录,可以找回. 【基本查询】 Ø 查询语句: * select [distinct] *|列名 from 表 [where 条件];
Ø 查询所有记录: * select * from exam; Ø 查询这个班级人的姓名和英语成绩: * select name,english from exam; Ø 查询英语成绩,将重复英语成绩去掉: * select distinct english from exam; Ø 查询李四的学生成绩: select * from exam where name='李四'; Ø 查询名称叫李四并且英语成绩大于90的 select * from exam where name='李四' and english >90; Ø 将成绩+10分进行显示: select name ,english+10,chinese+10 ,math+10 from exam; Ø 显示这个人的名称和对应总成绩的分数: select name,english+chinese+math from exam; Ø 使用as起别名,as可以省略. select name , english+chinese+math as sum from exam; 【条件查询】 Ø where语句后面可以加: 条件的关键字: = , > , >= , <, <= , <>
like中可以使用占位符: _ 和 % :下划线匹配一个字符, %:可以匹配任意多个字符. * like ‘张%’; like ‘张_’; like ‘%明’; like ‘%明%’;
in 后跟着一组值. * id in (1,2,3)
and or not 【排序查询】 Ø order by 对数据进行排序.默认升序. (asc升序,desc降序) * 查询所有学生的信息,并且按语文成绩进行排序. * select * from exam order by chinese; * 查询所有学生的信息,并且按语文成绩进行降序排序. * select * from exam order by chinese desc; * 查询学生的信息,按照英语成绩降序排序,如果英语成绩相同,按照语文降序. * select * from exam order by english desc, chinese desc; * 查询姓李的学生的信息,同时按照英语升序排序. * select * from exam where name like '李%' order by english asc; 【聚合函数】 Ø sum() Ø count() Ø max() Ø min() Ø avg() * 查询每个学生总成绩: * select name,(english+chinese+math) from exam; * 统计所有学生的总分: * select sum(english+chinese+math) from exam; -- ifnull(english,0) * select sum(english)+sum(chinese)+sum(math) from exam; * 统计学生的个数: * select count(*) from exam; * 统计英语成绩的最高分: * select max(english) from exam; * 统计语文成绩的最低分: * select min(chinese) from exam; * 统计英语成绩平均分: * select avg(english) from exam; 【分组】 Ø group by 创建一个订单详情的表: * 统计订单中的每类商品所购买的个数: * SELECT product,COUNT(*) FROM orderitem GROUP BY product; * 统计订单中的每类商品所花的金额: * SELECT product,SUM(price) FROM orderitem GROUP BY product; * 统计订单中的每类商品所花总金额大于2000信息. * SELECT product,SUM(price) FROM orderitem GROUP BY product HAVING SUM(price) > 2000;
* 统计订单中名称有电子的商品并且所花金额大于1500同时按照价格降序排序: * SELECT product,SUM(price) FROM orderitem WHERE product LIKE '电%' GROUP BY product HAVING SUM(price) > 1500 ORDER BY SUM(price) DESC; 【SQL的查询语句的总结】 顺序: s...f...w...g...h...o...; 【数据库的多表设计】 数据库都是关系型的数据库,存的是实体之间的关系.实体之间有哪些关系? 实体的关系总结起来就有三种关系:
***** 约束:用来保证数据的完成型. * 多表约束:外键约束!!! ***** 给orders表中的cid添加外键约束. * alter table orders add foreign key (cid) references customer(cid); 【多表的查询的SQL】 Ø 多表的查询的方式: * 交叉连接: * select * from A,B; --- 获得的是两个表的笛卡尔积. * 内连接: inner join -- inner 可以省略 * 显式内连接:select * from A inner join B on 条件;
* 隐式内连接:select * from A,B where 条件;
* 外连接:outer join -- outer 可以省略 * 左外连接:left outer join -- select * from A left outer join B on 条件;
* 右外连接:right outer join -- select * from A right outer join B on 条件;
【多表查询的子查询】 Ø 一个SQL语句查询的过程中需要依赖另一个查询语句. SELECT * FROM customer c,orders o WHERE c.cid = o.cid AND c.cid IN (SELECT cid FROM orders WHERE addr LIKE '海淀%'); 【多表练习】 按客户名称统计订单的个数. SELECT c.cname,COUNT(*) FROM customer c,orders o WHERE c.cid = o.cid GROUP BY c.cname;