Mysql(二)SQL语句

SQL语句

注意
• SQL 语言大小写不敏感。
• SQL 可以写在一行或者多行
• 关键字不能被缩写也不能分行
• 各子句一般要分行写。
• 使用缩进提高语句的可读性。

(一)DQL

https://baijiahao.baidu.com/s?id=1595349117525189591&wfr=spider&for=pc

1、基础查询
SELECT 要查询的东西
	【FROM 表名】;

类似于Java中 :System.out.println(要打印的东西);
特点:
①通过select查询完的结果 ,是一个虚拟的表格,不是真实存在
② 要查询的东西 可以是常量值、可以是表达式、可以是字段、可以是函数


一、使用别名
    1、使用AS
    SELECT last_name AS name
    FROM employees;

    2、使用空格,别名特殊时建议加双引号
    SELECT last_name "Name", salary*12 "Annual Salary"
    FROM employees;
二、去重
	SELECT DISTINCT last_name 
	FROM employees;
三、+#两个都为数值型,做加法运算
    SELECT 100+90;
    #有一方为字符型,则尝试转化为数值型,失败则为0
    SELECT '100'+90;
    SELECT 'join'+90;
    #null结果均为null
    SELECT null+90;

    #+号也可用CONCAT代替
    SELECT CONCAT(100,90);
四、IFNULL()
    #该字段为null使查询结果为0
    SELECT IFNULL(a,0);
2、条件查询

根据条件过滤原始表的数据,查询到想要的数据。

语法:
select 
		要查询的字段|表达式|常量值|函数
	fromwhere 
		条件 ;
		
分类:
一、条件表达式
	示例:salary>10000
	条件运算符:
	> < >= <= = !=(建议使用<>)

二、逻辑表达式
	示例:salary>10000 && salary<20000

    逻辑运算符:
        and&&):两个条件如果同时成立,结果为true,否则为false
        or(||):两个条件只要有一个成立,结果为true,否则为false
        not(!):如果条件成立,则not后为false,否则为true

三、模糊查询
    (1%代表任意多个字符(包含0个),_代表任意单个字符,\_转义为\
        示例:last_name like 'a%'
             last_name like '\_%'
             last_name like '$_%' ESCAPE '$'2BETWEEN AND
        包含临界值,左右别写颠倒
        select 
                要查询的字段|表达式|常量值|函数
            fromwhere 
                a>=100 and a<=120
        等价于
        select 
                要查询的字段|表达式|常量值|函数
            fromwhere 
                a (NOT) BETWEEN 100 AND 1203IN
        括号中类型必须相同或兼容
        select 
                要查询的字段|表达式|常量值|函数
            fromwhere 
                a=1 OR a=2;
        等价于
        select 
                要查询的字段|表达式|常量值|函数
            fromwhere 
                a IN(1,2);4IS NULL 判断是否为空,不可用于其他判断
         <=> 安全等于,可用于其他判断
3、排序查询
    默认升序,语法:
    select
        要查询的东西
    fromwhere 
        条件
    order by 排序的字段|表达式|函数|别名 【asc|desc】

    先a升序排,后b降序排
    select
        要查询的东西
    fromwhere 
        条件
    order by a ASC,b DESC;
4、分组查询
语法:
	select 查询的字段,分组函数
	fromgroup by 分组的字段

特点:
1、分组筛选
            针对的表	位置			关键字
    分组前筛选:	原始表		group by的前面		where
    分组后筛选:	分组后的结果集	group by的后面		having
    select
        count(*)
    fromwhere 
        条件
    GROUP BY 
    order by a ASC,b DESC;
    HAVING count(*)>1;
2、可以按多个字段分组,字段之间用逗号隔开
5、连接查询

(1)sql92:仅支持内连接和外连接

内连接
(1)等值查询
    a.多表查询结果为多表的交集部分
    b.n表连接至少需要n-1个条件
    c.建议给表起别名
        SELECT * from class,stu where class.cid=stu.cid;
        #使用别名,注意此时别名和表明限定只能用一个
        SELECT * from class c,stu s where c.cid=s.cid;
        #字段多个表均有需说明限定
        SELECT c.cid from class c,stu s where c.cid=s.cid;2)非等值查询
    在(1)基础上,条件为不为相等而已
(3)自连接
    连接查询多个表为自身
    SELECT c.cid from class c,class s where ...

(2)sql99

SELECT c.cid from class c[连接类型]
stu s where c.cid=s.cid;
1、内连接 inner1)等值查询
        SELECT c.cid from class c 
        inner join stu s on c.cid=s.cid(连接查询内容)
        where ...(其他内容)
    (2)非等值查询
    (3)自连接
    
少用
2、外连接
    左右外:
    用于查询一个表有而另一个表没有的情况
    主表:以此为主进行查询 从表
    (1)左外left[outer] 左为主表
    (2)右外right[outer] 右为主表
    全外:结果为共有+表一独有+表二独有,mysql不支持
    (3)全外full[outer]
3、交叉连接 cross
    即笛卡尔乘积:如果连接条件省略或无效则会出现,查询结果有m*n个
    解决办法:添加上连接条件

(3)7种join理论

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4VZSRYxo-1596117243638)(C:\Users\ddjj6\Pictures\Camera Roll\七种join 理论.png)]

a.内连接(两表的共有部分)

SELECT * FROM tbl_dep d INNER JOIN tbl_emp e ON d.id=e.deptId;

b.左连接(左表的全部,右表不满足补NULL)

SELECT * FROM tbl_dep d LEFT JOIN tbl_emp e ON d.id=e.deptId;

c.右连接(右表的全部,左表不满足的补NULL)

SELECT * FROM tbl_dep d RIGHT JOIN tbl_emp e ON d.id=e.deptId;

d.特殊的左连接(显示为左表的独有的数据)

SELECT * FROM tbl_dep d LEFT JOIN tbl_emp e ON d.id=e.deptId 
--非共有(右边没有)
WHERE e.deptId IS NULL;

e.特殊的右连接(显示为右表的独有的数据 )

SELECT * FROM tbl_dep d RIGHT JOIN tbl_emp e ON d.id=e.deptId 
---非共有(左边没有)
WHERE d.id IS NULL;

f.全连接(显示全部数据)(mysql 不支持 full outer join)

--UNION :有去重的功能
SELECT * FROM tbl_dep d LEFT JOIN tbl_emp e ON d.id=e.deptId UNION
SELECT * FROM tbl_dep d RIGHT JOIN tbl_emp e ON d.id=e.deptId;

g.显示两表的独有的数据

--d+e
SELECT * FROM tbl_dep d LEFT JOIN tbl_emp e ON d.id=e.deptId WHERE e.deptId IS NULL UNION
SELECT * FROM tbl_dep d RIGHT JOIN tbl_emp e ON d.id=e.deptId WHERE d.id IS NULL;
6、子查询
SELECT name 
FROM class
WHERE (SELECT…………)

分类

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eD02RYa8-1596117243654)(C:\Users\ddjj6\AppData\Roaming\Typora\typora-user-images\1571390759404.png)]

特点

1、子查询都放在小括号内
2、子查询可以放在from后面、select后面、where后面、having后面,但一般放在条件的右侧
3、子查询优先于主查询执行,因为主查询使用了子查询的执行结果
4、子查询根据查询结果的行数不同分为以下两类:
① 单行子查询
结果集只有一行
一般搭配单行操作符使用:> < = <> >= <=
非法使用子查询的情况:
a、子查询的结果为一组值
b、子查询的结果为空
② 多行子查询
结果集有多行
一般搭配多行操作符使用:any、all、in、not in
in: 属于子查询结果中的任意一个就行
any和all往往可以用其他查询代替

7、分页查询

语法

select 字段|表达式,...
from 表
【where 条件】
【group by 分组字段】
【having 条件】
【order by 排序的字段】
limit 【起始的条目索引,】条目数;

特点

1.起始条目索引从0开始

2.limit子句放在查询语句的最后

3.查询11-15行共15条
select * from  表 limit 10,5
公式:select * from  表 limit (page-1)*sizePerPage,sizePerPage
假如:
每页显示条目数sizePerPage
要显示的页数 page

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值