*插入数据
insert into 表名 (列名,列名...) values (值1,值2...); 插入指定列的值
insert into 表名 values (值1,值2...); 插入所有列的值
* 注意事项:
* 列名的个数与值的个数对应.
* 列的类型与值的类型对应.位置也要对应.
* 列的类型如果是字符串或者日期,写值的时候使用单引号将值引起来.
* 插入的值的最大长度不能超过列的最大长度.
*中文乱码问题
黑窗口默认是gbk字符集,而MYSQL的客户端和服务器端都是utf8
查看字符集
show character like %**%
去安装目录的ini找到客户端的字符集更改字符集(改的时候先把文件弄到桌面改,改完替换回去),
然后重新加载MySQL的配置文件 services.msc
然后停止MySQL服务,重新启动MySQL服务
执行之前的SQL语句就可以了
*修改记录
*语法
update 表名 set 表名=值,列名=值 [where 条件];
*删除记录
delete from 表 [where 条件]
删除表中的一行记录,不能删除某列;
如果没有条件,则删除的是表中所有的列
*删除表中所有记录truncate table 表名 和delete from 表名的区别:
truncate table 表名:删除表的记录:将整个表删除,探后重新创建一个新的表,truncate属于DDL.
delete from 表名:删除表的记录,逐条删除记录,delete属于DML.
事务管理,只能作用在DML语句上,在事务中使用delete,可以找回来.
*查询记录
select [distinct] */列名 from 表名 [where 条件];
*where条件的关键字:
*=,>,<,<=,>=,<>,!=
*like中可以使用占位符:
_:匹配一个字符
%:可以匹配任意多个字符
*in后面跟一组值
id in(1,2,3) id=1 or id=2 or =3;
id in(select id from table where id>1)
*and or not
*is not null,其他全是not *
*排序查询
order by 对数据进行排序,默认升序
*升序 asc (a-c)
*降序 desc(d-c)
* 查询学生的信息,按照英语成绩降序排序,如果英语成绩相同,按照语文降序.
select * from exam order by english desc, chinese desc;
* 查询姓李的学生的信息,同时按照英语升序排序.
select * from exam where name like '李%' order by english asc;
*聚合函数
sum():计算的是列的值
count()
max()
min()
avg()
null+任意数都是null
有成绩为null时,可以使用ifnull(English,0)(把英语为null的成绩赋值为0)
*分组
*数据库的多表设计
数据库都是关系型的数据库,都是实体之间的关系.
*实体之间的关系:
一对多:
*客户和订单:一个客户可以产生多个订单,一个订单只能属于某一个顾客.
*部门和员工:一个部门可有读个员工,一个员工只能属于某一个部门.
多对多:
*学生和课程:一个学生可以选择多门课程,一个课程可以有多个学生.
*订单和商品:一个订单可以有多个商品,一个商品可以出现在多个订单上.
一对一:
*公司和地址:一个公司只能有一个注册地址,一个地址只能被一个公司注册.
*多表的设计
*一对多的关系的建表原则:
* 在多的一方创建一个字段,这个字段作为外键执向一的一方的主键.
* 多对多的关系的建表原则:
* 创建一个第三种表,中间表中至少需要两个字段分别作为外键执向多对多双方的各自的 主键.
* 一对一的关系的建表原则:
* 唯一外键对应:假设一对一的双方是一对多的关系.在多的一方创建外键执向一的一方的主键. 需要在外键上添加一个unique约束.
* 主键对应:将一对一的双方的主键建立映射.
*使用SQL创建一对多的关系的约束
* 约束:用来保证数据的完整型.
* 多表约束:外键约束!!!
* 给orders表中的cid添加外键约束.(关联)
alter table orders add foreign key (cid) references customer(cid);
外键由Java程序维护,关联后只能先删除关联的id,然后删除主键id
*多表的查询
多表的查询的方式
交叉连接
select * from a,b --获得是两个表的笛卡尔积
内连接 inner join --inner可以省略 得到两个表的交集
*显示内连接:select * from A inner join B on 条件;
*隐式内连接:
外链接 左外链接,得到左侧所有和右侧的交集
外连接:outer join -- outer 可以省略
* 左外连接:left outer join -- select * from A left outer join B on 条件;
* SELECT * FROM customer c LEFT OUTER JOIN orders o ON c.cid = o.cid;
* 右外连接:right outer join -- select * from A right outer join B on 条件;
* SELECT * FROM customer c RIGHT OUTER JOIN orders o ON c.cid = o.cid;
先使用外连接,不行再使用没连接,最后才使用交叉连接
*多表查询的子查询
*一个SQL语句查询的过程中需要依赖另一个查询语句.
SELECT * FROM customer c,orders o WHERE c.cid = o.cid AND c.cid IN (SELECT cid FROM orders WHERE addr LIKE '海淀%');
|
|