MySQL 基础(二)
教学视频转:http://www.atguigu.com/download_detail.shtml?v=3
DQL语言的学习
#进阶1:基础查询
/*
语法:
SELECT 查询列表 FROM 表名;
类似于:System.out.println(打印东西);
特点:
1、查询列表可以是:表中的字段、常量值、表达式、函数
2、查询的结果是一个虚拟的
*/
USE goods;
#1、查询表中的单个字段
SELECT loginname FROM t_user;
#2、查询表中的多个字段
SELECT loginname,loginpass FROM t_user;
#3、查询表中的所有字段
SELECT * FROM t_user;
SELECT uid,loginname,loginpass,email,`status`,activationCode FROM t_user;
#4、查询常量值
SELECT 100;
SELECT 'john';
#5、查询表达式
SELECT 100%98;
#6、查询函数
SELECT VERSION();
#7、起别名
/*
1、便于理解
2、如果要查询的字段有重名的情况,使用别名可以区分开来
*/
#方式一:使用as
SELECT 100%98 AS 结果;
SELECT loginname AS 用户登录名,loginpass AS 用户登录密码 FROM t_user;
#方式二:使用空格
SELECT loginname 用户登录名,loginpass 用户登录密码 FROM t_user;
#案例:查询loginname,显示结果为login user
SELECT loginname 'login user' FROM t_user;
#8、去重 DISTINCT
#案例:查询用户表中有几种状态类型
SELECT DISTINCT `status` FROM t_user;
#9、+号的作用
/*
java中的+号:
1、运算符,两个操作数都为数值型
2、连接符,只要有一个操作数为字符串
mysql中的+号:
仅仅只有一个功能:运算符
SELECT 100+90; 两个操作数都为数值型,则做加法运算
SELECT '123'+90; 只要其中一方为字符型,试图将字符型转换成数值型
如果转换成功,则继续做加法运算
如果转换失败,则将字符型数值转换成0
SELECT 'John'+90;
SELECT NULL+10; 只要其中一方为null,则结果肯定为null
*/
#案例:查询用户名和密码连接成一个字段(拼接 concat)
SELECT CONCAT(loginname,' ',loginpass) 拼接结果 FROM t_user;
#防止拼接中null的影响
SELECT
IFNULL(pid,0) AS 父类id,
pid
FROM
t_category;
#案例:查询分类表的全部列,各个列之间用逗号连接,列头显示成OUT_PUT
SELECT
CONCAT(cid,',',cname,',', IFNULL(pid,0),',',`desc`) AS OUT_PUT
FROM
t_category;
#【补充】concat函数
功能:拼接字符
SELECT CONCAT(1,2,2);
#【补充】ifnull函数
功能:判断某字段或表达式是否为null,如果为null,返回指定的值,否则返回原本的值
SELECT IFNULL(pid,0) FROM t_category;
#【补充】isnull函数
功能:判断某字段或表达式是否为null,如果是,则返回1,否则返回0
SELECT ISNULL(pid) FROM t_category;
#进阶2:条件查询
/*
语法:
SELECT
查询列表
FROM
表名
WHERE
筛选条件;
分类:
一、按条件表达式筛选
条件运算符:> < = != <> >= <= <=>
二、按逻辑表达式筛选
逻辑运算符:
&& || !
AND OR NOT
&&和and:两个条件都为true,结果为true,反之为false
||或or:只要有一个条件为true,反之为true
!或not:如果连接的条件本身为false,结果为true,反之为false
三、模糊查询
LIKE
BETWEEN AND
in
IS NULL
*/
#一、按条件表达式筛选
#案例1:查询图书价格大于100元的图书信息
SELECT
*
FROM
t_book
WHERE
price>100;
#案例2:查询用户名不是'liSi'的用户名和密码
SELECT
loginname,loginpass
FROM
t_user
WHERE
loginname <>'liSi';
#二、按逻辑表达式筛选
#案例1:查询图书价格50到150之间的图书名、图书价格
SELECT
bname,
price
FROM
t_book
WHERE
price>=50 AND price<=150;
#案例2:查询图书价格不是在50到150之间,或者折扣高于6.5的图书信息
SELECT
*
FROM
t_book
WHERE
#price>150 OR price<50 OR discount>6.5;
NOT(price>=50 AND price<=150) OR discount>6.5;
#三、模糊查询
#1、LIKE
#案例1:查询用户名中包含字符a的用户信息
SELECT
*
FROM
t_user
WHERE
loginname LIKE '%a%';
#案例1:查询分类排序中包含字符1的分类信息
SELECT
*
FROM
t_category
WHERE
orderBy LIKE '1_';
#案例2:查询用户名中第三个字符,第七个字符都为a的用户信息
SELECT
*
FROM
t_user
WHERE
loginname LIKE '__a___a%';
#案例3:查询用户名中第二个字符为_的用户信息(需要转义一下)
SELECT
*
FROM
t_user
WHERE
loginname LIKE '_\_%';
SELECT
*
FROM
t_user
WHERE
loginname LIKE '_$_%' ESCAPE '$';
#2、BETWEEN AND
/*
1、使用between and 可以提高语句的简洁度
2、包含临界值
3、两个临界值不要调换顺序
*/
#案例:查询图书价格50到150之间的图书名、图书价格
SELECT
bname,
price
FROM
t_book
WHERE
price BETWEEN 50 AND 150;
#3、in
/*
含义:判断某字段的值是否属于in列表中的某一项
特点:
1、使用in提高语句的简洁度
2、in列表的值类型必须一致或兼容
'123' 可以转换成 123
*/
#案例:查询用户的密码是aaa、123、abc的用户信息
SELECT
*
FROM
t_user
WHERE
loginpass IN('aaa','123','abc');
#4、is NULL
/*
=或<>不能用于判断null值
is null或者is not null 可以判断null值
*/
#案例1:查询一级分类的分类id和分类名
SELECT
cid,cname
FROM
t_category
WHERE
pid IS NULL;
#案例2:查询二级分类的分类id和分类名
SELECT
cid,cname
FROM
t_category
WHERE
pid IS NOT NULL;
#安全等于<=>
#案例1:查询一级分类的分类id和分类名
SELECT
cid,cname
FROM
t_category
WHERE
pid <=> NULL;
#案例2:查询用户名为'liSi'的用户信息
SELECT
*
FROM
t_user
WHERE
loginname <=> 'liSi';
#is null pk <=>
IS NULL :仅仅可以判断null值,可读性较高
<=> :既可以判断null值,又可以判断普通的数值,可读性较低