sql回顾

1、数据库分类

    数据定义语言:简称DDL(Data Definition Language),关键字:create,alter,drop等

    数据操作语言:简称DML(Data Manipulation Language),关键字:insert,delete,update等

    数据控制语言:简称DCL(Data Control Language),用来定义数据库的访问权限和安全级别,及创建用户。

    数据查询语言:简称DQL(Data Query Language),关键字:select,from,where等


2、命令行乱码问题

 ***我们在dos命令行操作中文时,会报错

insert into user(username,password) values(‘张三’,’123’);

ERROR 1366 (HY000): Incorrect string value: '\xD5\xC5\xC8\xFD' for column 'username' at row 1

    ***原因:因为mysql的客户端编码的问题我们的是utf8,而系统的cmd窗口编码是gbk

    **解决方案(临时解决方案):修改mysql客户端编码。

show variables like 'character%'; 查看所有mysql的编码

client connetion result 和客户端相关

database server system 和服务器端相关

将客户端编码修改为gbk.

set character_set_results=gbk; / set names gbk;

以上操作,只针对当前窗口有效果,如果关闭了服务器便失效。

    **如果想要永久修改,通过以下方式:

mysql安装目录下有my.ini文件

default-character-set=gbk 客户端编码设置

character-set-server=utf8 服务器端编码设置

注意:修改完成配置文件,重启服务


3、聚合函数

* count:统计指定列不为NULL的记录行数;

* sum:计算指定列的数值和,如果指定列;

* max:计算指定列的最大值,如果指定列是字符串类型,那么使用字符串类型不是数值类型,那么计算结果为0排0序运算;

* min:计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;

* avg:计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;


4、分组查询

* 分组查询是指使用group by字句对查询信息进行分组,例如:我们要统计出zhanguw表中所有分类账务的总数量,这时就需要使用group by 来对zhangwu表中的账务信息根据parent进行分组操作。

* SELECT 字段1,字段2… FROM 表名 GROUP BY 字段 HAVING 条件;

* 分组操作中的having子语句,是用于在分组后对数据进行过滤的,作用类似于where条件。

    ** having与where的区别

* having是在分组后对数据进行过滤.

* where是在分组前对数据进行过滤

* having后面可以使用分组函数(统计函数)

* where后面不可以使用分组函数。


5、外键(一对多)

特点:外键可以为空,可以重复,不能引用不存在的记录

建表时加外键关联:

        CONSTRAINT fk_emp_dept FOREIGN KEY(dno) REFERENCES dept(deptno)

       ——constraint 外键名-fk_从表名_主表名 foreign key(本表外键列名)references 主表名(主表主键)

建表后加外键

        添加前缀  alter table emp add 

        CONSTRAINT fk_emp_dept FOREIGN KEY(dno) REFERENCES dept(deptno)


6、一对一关系

        CONSTRAINT fk_wife_hasband FOREIGN KEY(wid) REFERENCES dept(hid)

         从表主键作外键,引用主表主键,非空唯一


7、多对多

        两张表都是主表,专门建一个中间表,两个外键分别关联两张表的主键

        stu_id

        tea_id

        constraint fk_students foreign key(stu_id) references students(stu_id)

        constraint fk_teachers foreign key(tea_id) references teachers(tea_id)


8、合并结果集

        查询语句的结果可以看成是一个表(结果集)

        结果集相同的两个表才可以合并结果集    

        union all       完全相同的行也不会去掉

        union            完全相同的行会被去掉


select deptno from emp

union( all)

select deptno from dept


8、内连接

mysql方言

select * 

from emp,dept

where emp.deptno=dept.deptno;

*******标准

select * 

from emp inner join dept

on emp.deptno=dept.deptno;

自然连接(自动找表中名字相同的列)

select * 

from emp natrual join dept;


9、外连接

select emp.name,emp.sal,ifnull(dept.name,"无部门") as dname   //函数

from emp left outer join dept

on emp.deptno=dept.deptno;


10、子查询

心里想着查询结果也是张表;

以查询出来的表为条件为条件,以查询出来的表为查询对象

all any关键字


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值