mysql数据库基础学习总结3(查询)

012.多表查询      013.多表连接

1.多表查询
    语法:
        select * from table1,table2;
    使用这种语法可以查询出两个表中的记录的组合(列相加,行相乘,这就是笛卡尔乘积);    
如果两个表中有重复的列名,可以通过 表名.列名进行区分
为了方便重复使用表名,可以为表设置一个别名
多个表进行连接查询;
    select empno,e.deptno,dname,sal,gradeName from emp e,dept d,sal_grade s
        where e.deptno=d.deptno and sal BETWEEN s.lowsal
        and s.hignsal
2.内连接和外连接
    内连接:完全满足连接条件;
    外连接:就算不满足连接条件,其中一个表中的数据也一定会查到;
3.标准sql-99的多表查询语法
    select * from t1  连接方式 t2 
        on 连接条件
    
    select * from  t1 inner join t2
        on t1.xxx=t2.xxx;
外连接的语法
    左外:left [outer] join
    右外:right [outer] join
    
    示例:
        select * from emp left  join dept
            on emp.deptno=dept.deptno;
    三表相联的示例
        select * from emp e left  join dept d
            on e.deptno=d.deptno inner join sal_grade s
            on sal BETWEEN s.lowsal and s.hignsal
自连接
    表中的一个列的取值范围来源于当前的其它字段(主键)
    思路:将一个表查两次(把一张表当成两个表来看待)

    示例
        select e1.empno,e1.ename,e2.ename leader from emp e1,emp e2
            where e1.leader=e2.empno    and e1.empno=7878

014.子查询

1.子查询 
    子查询就是在一个查询语句中同时包含了更外一个查询语句,这样的语名就是子查询;
    一个子查询可以放在另外一个查询的三个位置,分别是
    where 子句
    having 子句
    from 子句;
使用where或having时,子查询的结果可以返回单行记录,也可以返回多行记录;返回单行记录时可以使用> ,< ,=,!=等操作符,返回多行记录时,可以使用in,any,all操作符;
2.any,all的区别
    any与all必须与>,< ,<=,<=一起结合着使用;
    >any():大于any集合中任意一个,其实就是大于最小的那个
    >all():大于all集合中所有的,其实就是大于最大的那个;
3.练习;
查询出比james的工资高的所有员工;
查询出比平均工资高的所有员工;
查询出james的同事
查询出比james工资高,并且与james职位相同的员工;
查询出平均工资高于20部门的平均工资的职位;并从高到低进行排序;
查询出没有员工的部门;

015.exists子句

1.exists语句
    exists语法;
    select * from 表名
    where exists(sql语句)
2.说明:
        exists中包含一条查询语句 ,如果查询语句有结果,那么这个表达式为true,如果子查询中没有结果,则表达式的值为false; 
        使用exists时,先执行外部查询,再执行子查询;在子查询中可以使用外部的查询表; 

016.常用函数

常用函数
    数值:
        abs:绝对值
        Truncate():截断
        Round():四舍五入
        RAND():随机数
        POW():次方        
    字符:
        length():字节数
        char_length():字符数
        trim():去除前后的空格
        concat():连接字符串
        upper():转成大写
        lower():转成小写
        substring():截取子串
        
    日期:
        now():当前日期和时间
        current_date:当前日期
        current_time:当前日期
        select now()- INTERVAL 2 WEEK 
               时间  +,-操作符  INTERVAL  增量(1,2,4)  单位(DAY,YEAR,MONTH)
    转换:
         select DATE_FORMAT(now(),'%Y-%m-%d')
         select STR_TO_DATE('2015-6-23','%Y-%m-%d')
case语句,可以做分支判断 ;(行变列时可以使用)
     select ename,job,sal,
     case 
         when sal>15000 then '高薪'
        when sal>8000 then '中等'
        else '低薪'
        end salary
    from emp;

    select ename,job,sal,
    case job
        when 'manager' then '经理'
        when 'programmer' then '攻城狮'
        else '其他'
    end job
    from emp
 

   

扫描二维码关注公众号,回复: 4822778 查看本文章

猜你喜欢

转载自blog.csdn.net/Sunhongyu51/article/details/85933074