MySql数据库学习笔记(四)数据查询

MySql数据库学习笔记(四)数据查询

一、基础查询

select 查询列表 from 表名;

1、查询列表可以是:表中的字段、常量值、表达式、函数
2、查询结果是一个虚拟的表格
1,查询表中的单个字段

select stu_name from student;

2,查询表中的多个字段

select stu_id,stu_name,stu_sdept from student;

3,查询表中的全部字段

select * from student;

4,查询常量值

select 常量(整型、字符…);// 注意:字符型和日期型的常量值必须用单引号引起来,数值型不需要

5,查询表达式

select 100%98; //结果为2

6,查询函数

select 函数名;

例:select version();

7,为字段起别名
  • 便于理解

  • 如果要查询的字段名有重名情况,使用别名可以区分开来

方式一:

select stu_id as 学号 ,stu_name as 姓名 from student;

方式二:

select stu_id 学号 ,stu_name 姓名 from student;

另外:如果起的别名有关键字或特殊符号,需要用双引号进行标记。

例如:select stu_sdept as "out put" from student;

8,去重 select distinct 字段名 from 表名;

select distinct stu_id from student;

9, +号的作用

/*

java中的+号:

1,运算符,两个操作数都为数值型

2,连接符,只要有一个操作数为字符串

mysql中的+号

错误示范:select stu_id+stu_name from student;

只有一个功能:运算符

select 100+90; 两个操作数都为数值型,则做加法运算。

select '123' + 90; 只要其中一方为字符型,试图讲字符型数值转换成数值型

​ 如果转换成功,则继续加法运算。

select 'join'+10; 如果转换失败,则将字符型数值转换成0

select null+10; 只要其中一方为null,则结果肯定为null

*/

字段拼接用concat()函数
  • 字符拼接:select concat('a','b','c') as 结果;
  • 字段拼接: select concat(stu_id,stu_name) as 姓名;
ISNULL(参数)函数:判断某字段、表达式是否为空,如果是,则返回1,否则返回0

二、条件查询

语法:select 查询列表 from 表名 where 筛选条件;

特点:

1,按表达式筛选

​ 条件运算符:>、<、=、!=、<>、>=、<=

例:查询工资>12000的员工信息

select * from employees where salary>12000;

例:查询部门编号不等于90号的员工名和部门编号

select last_name,department_id from employees where department_id != 90;

或者 select last_name,department_id from employees where department_id <> 90;

2,按逻辑表达式筛选

​ 逻辑运算符:and (&&)、or (||)、not (!)

例:查询工资在10000到20000之间的员工名、工资及奖金

select last_name,salary,commission_pct from employees where salary >= 10000 and salary <= 20000;

例:查询部门编号不是在90到110之间,或者工资高于15000的员工信息

select * from employees where department_id < 90 or department_id > 110 or salary > 15000;

或者select * from employees where not(department_id >= 90 and department_id <= 110) or salary > 15000;

3、模糊查询

  • like

    特点:% 任意多个字符; _ 任意单个字符; 可用于筛选字符型数值或数值型数值

    例:查询员工名中包含字母a的员工信息

    select * from employees where last_name like '%a%'//不区分所查字符的大小写

    例:查询员工名中第三个字符为e,第五个字符为a的员工名和工资

    select last_name from employees where last_name like '__e_a%';

    例:查询员工名第二字符为_的员工名

    select last_name from employees where last_name like '_\_%';//需要转义

    select last_name from employees where last_name like '_$_%' escape '$';//escape 指定转义字符

  • between and

    1. 使用between and 可以提高语句的简洁度
    2. 包含临界值
    3. 临界值顺序不可颠倒
例:查询编号在100到120之间的员工信息

select * from employees where employees_id >= 100 and employees_id <= 120;

select * from employees where employees_id between 100 and 120;//包含临界值

  • in

    1. 使用in 提高了语句的简洁度
    2. in列表的值类型必须一致或兼容
    例:查询员工的工种编号是IT_PROT、AD_VP、AD_PRES中的一个员工名和工种编号

    select last_name,job_id from employees where job_id = 'IT_PROG' or job_id = 'AD_VP' or job_id = 'AD_PRES';

    select last_name,job_id from employees where job_id in('IT_PROG','AD_VP','AD_PRES');

  • is null / is not null

=或<>不能用于判断null值

例:没有奖金的员工名和奖金率

select last_name,commission_pct from employees where commission_pct is null;

安全等于 <=>
例:查询没有奖金的员工名和奖金率

select last_name , commission_pct from employees where commission_pct <=> null;

例:查询工资为12000的员工信息

select * from employees where salary<=> 12000;

<=>和is null比较:

is null:仅仅可以判断null值,可读性较高,建议使用

<=> :既可以判断null值,又可以判断普通数值,可读性较低

例题:查询员工号为176的员工的姓名和部门号和年薪

select last_name,department_id,salary*12(1+ifnull(,0)) as 年薪 from employees where employee_id = 176;

三、排序查询

1,语法

select 查询列表 from where 筛选条件 order by 排序列表 asc(升序)|desc(降序);

例1:查询员工信息,要求工资从高到低排序

select * from employees order by salary desc; //从高到低排序

select * f rom employees order by salary asc; //从低到高排序

特点:
  1. asc代表的是升序,desc代表的是降序,如果不写,默认是升序
  2. order by 子句中可以支持单个字段、多个字段、表达式、函数、别名。

  3. order by 子句一般是放在查询语句的最后面,limit子句除外

例2:查询部门编号>=90的员工信息,按入职时间的先后进行排序 (添加筛选条件)

select * from employees where department_id >= 90 order by hiredate asc;

例3:按年薪的高低显示员工的信息和年薪 (按表达式排序)

select *, salary*12*(1+ifnull(commission_pct,0)) as 年薪 from employees where department_id >= 90 order by salary*12*(1+ifnull(commission_pct,0)) desc;

例4:按年薪的高低显示员工的信息和年薪 (按别名排序)

select *, salary*12*(1+ifnull(commission_pct,0)) as 年薪 from employees where department_id >= 90 order by 年薪 desc;

例5:按姓名的长度显示员工的姓名和工资

SELECT LENGTH(last_name) AS 字节长度,last_name,salary FROM employees ORDER BY LENGTH(last_name) DESC;

例:查询员工信息,要求先按工资排序,再按员工编号排序(按多个字段排序)

SELECT * FROM employees ORDER BY salary ASC, employee_id DESC;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值