select * from emp;
select * from dept;
–A{a,b,c} B{d,e,f,g}
–A*B = {ad,ae,af,ag,bd,be,bf,bg,cd,ce,cf,cg}
select ename,job,sal,dname from emp,deptno
–等值连接(只能查询出符合条件的数据,例如员工表与部门表中能对应的列deptno)
select e.ename,e.job,e.sal,d.dname,e.deptno
from emp e,dept d
where e.deptno = d.deptno and e.sal > 3000
/*
内连接(Inner Join)
语法:
select column_name(s)
from table_name1
inner join table_name2
on table_name1.column_name=table_name2.columu_name
注意:on后面只写表的关联条件
*/
select e.ename,e.job,e.sal,d.dname,e.deptno
from emp e
inner join dept d
on e.deptno = d.deptno
where e.sal > 3000
练习:
/*
外连接(outer join)
1.左外连接 left outer join : 将左表中符合条件的数据与不符合条件的数据全查询出来
2.右外连接 right outer join : 将右表中符合条件的数据与不符合条件的数据全查询出来
3.全外连接 full outer join(mysql中是不支持的,Oracle中支持) 不常用 查询出两表符合条件的数据
注意:outer可以省略
*/
/*
自连接: 将一张表当成两张表来看,这两张表是一模一样的(多表连接)
注意:要想使用自连接,表中的数据一定要有一定的规律
/
/
**函数:**也可以称为方法,它是一个功能,可以重用
函数:1.自定义函数 2.系统函数(重要) ifnull(comm,0)
IFNULL() 函数用于判断第一个表达式是否为 NULL,如果为 NULL 则返回第二个参数的值,如果不为 NULL 则返回第一个参数的值。
1.字符串函数
char_length(s) 返回字符串s的字符数
*/
select char_length(“hhhhhh”) from dual –执行结果:6
员工表信息查询:—ename为列 (第一个为要查询的,第二个为查询之后的) emp表名
–concat(s1,s2…sn) 字符串 s1,s2 等多个字符串合并为一个字符串
select concat("sql ","runoob ","gooole ",“facebook”) as concatenatedstring;
–执行结果: sql runoob gooole facebook
–upper(s) 将字符串转换为大写
–lowers(s) 将字符串s的所有字母变成小写字母
–trim(s) 去掉字符串s开始和结尾处的空格
–upper(s) 将字符串转换为大写
–lowers(s) 将字符串s的所有字母变成小写字母
–trim(s) 去掉字符串s开始和结尾处的空格
–substr(s,start,length) 从字符串s的start位置截取长度为length的子字符串
–2.日期函数
–返回系统当前的日期
select curdate() from dual; --执行结果:2021-01-15
–curtime() 返回当前时间
select curtime(); --执行结果:17:12:02
–now() 返回当前日期和时间
select now() --执行结果:2021-01-15 17:13:48
–last_day(d) 返回给给定日期的那一月份的最后一天
select last_day(“2017-06-20”); --执行结果:2017-06-30
3.分组函数
如果多值的列与分组函数混用,select后边有几个多值的列,group by后边要将多值的列都需要写上,例如下:
分组函数
分组函数中空值处理:
创建数据组
排除组结果
select语句执行过程