Mysql数据库-DQL语言的学习(上)

SQL的语言分类

  •     DQL(Data Query Language):数据查询语言:select 
  •     DML(Data Manipulate Language):数据操作语言:insert 、update、delete
  •     DDL(Data Define Languge):数据定义语言:create、drop、alter
  •     TCL(Transaction Control Language):事务控制语言:commit、rollback

DQL语言的学习

1.基础查询

use 表名

SELECT 要查询的东西 【FROM 表名】

特点:
    ①通过select查询完的结果 ,是一个虚拟的表格,不是真实存在
    ② 要查询的东西 可以是常量值、可以是表达式、可以是字段、可以是函数

示例:

      查询单个字段:select 字段名 from 表名;
      查询多个字段:select 字段名,字段名 ,字段名 from 表名;
      查询所有字段:select * from 表名
      查询常量:select 常量值;(注意:字符型和日期型的常量值必须用单引号引起来,数值型不需要)
      查询函数:select 函数名(实参列表);select VERSION();(查询版本号)
      查询表达式:select 100/1234;
      起别名①as    select 100%98  结果;②空格  select 100%98  结果;
      去重 :select distinct 字段名 from 表名;
      + 作用:做加法运算
select 数值+数值; 直接运算
select 字符+数值;先试图将字符转换成数值,如果转换成功,则继续运算;否则转换成0,再做运算
select null+值;结果都为null
 concat函数
功能:拼接字符
select concat(字符1,字符2,字符3,...);  select concat('a','b','c') as 结果;(abc)
 ifnull函数
功能:判断某字段或表达式是否为null,如果为null 返回指定的值,否则返回原本的值
select ifnull(commission_pct,0) from employees;
 isnull函数
功能:判断某字段或表达式是否为null,如果是,则返回1,否则返回0

2.条件查询

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

二、筛选条件的分类
1、简单条件运算符
> < = <> != >= <=  <=>
2、逻辑运算符

  • &&和and:两个条件都为true,结果为true,反正为false
  •   ||和or   :只要有一个条件为true,结果为true,反之为false
  •  ! 和not  :如果连接的条件本身为false,结果为true,反之为false

3、模糊查询
like:一般搭配通配符使用,可以判断字符型或数值型

通配符:

  • %任意多个字符,包含0个字符
  •               _ 任意单个字符
  • 转义字符 escape 

       select name from user where name like '-$-%' escape '$';

  • between and

    select age from user where age between 18 and 20;

  • in

查询年龄是 18、19、20

    select age from user where age in(18、19、20);

is null /is not null:用于判断null值

3.排序查询

  • 特点
  • asc :升序,如果不写默认升序
  • desc:降序
  • 排序列表 支持 单个字段、多个字段、函数、表达式、别名
  • order by的位置一般放在查询语句的最后(除limit语句之外)
select 查询列表 from 表 where 筛选条件 order by 排序列表 【asc}desc】

查询员工信息,要求工资从高到低排序
select * from employees order by salary desc;

按年薪高低显示员工信息和年薪【按表达式排序】
select * ,salary*12*(1+ifnull(commission_pct,0)) 年薪 from employees order by salary*12*(1+ifnull(commission_pct,0)) desc;

按年薪高低显示员工信息和年薪【按别名排序】
select * ,salary*12*(1+ifnull(commission_pct,0)) 年薪 from employees order by 年薪 desc;

按姓名的长度显示员工的姓名和工资【按函数排序】
select length(name) 字节长度,name,salary from employees order by length(name) desc;

查询员工信息,要求先按工资排序,再按员工编号排序【按多个字段排序】
select * from employees order by salary asc,id desc;

4.常见函数

  1. 字符函数
length(获取参数值的字节个数)
select length('john');
concat(拼接字符串)
select concat(last_name,'_',first_name) from employees;
upper,lower(字符大小写变换)
select upper(‘john’);
select lower(‘JHON’);

substr,substring
注意:索引从1开始
#截取从指定索引处后面所有字符
select substr('李莫愁爱上了陆展元',7)  out_put;

#截取从指定索引处指定字符长度的字符
select substring('李莫愁爱上了陆展元',1,3) out_put;

姓名中首字符大写,其他字符小写然后用_拼接,显示出来
select CONCAT(UPPER(SUBSTR(last_name,1,1)),'_',LOWER(SUBSTR(last_name,2)))  out_put FROM employees;

instr (返回子串第一次出现的索引,如果找不到返回0)
select instr('杨不殷六侠悔爱上了殷六侠','殷六侠') AS out_put;

trim(去掉字符串中前后空格)
select LENGTH(TRIM('    张翠山    ')) AS out_put;

select TRIM('aa' FROM 'aaaaaaaaa张aaaaaaaaaaaa翠山aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')  AS out_put;

lpad (用指定的字符实现左填充指定长度)
select lpad ('殷素素',10,'*') AS out_put;

rpad (用指定的字符实现右填充指定长度)
select RPAD('殷素素',12,'ab') AS out_put;
replace(替换)

select REPLACE('周芷若周芷若周芷若周芷若张无忌爱上了周芷若','周芷若','赵敏') AS out_put;

2.数学函数

round (四舍五入)
SELECT ROUND(-1.55);

SELECT ROUND(1.567,2);

ceil (向上取整,返回>=该参数的最小整数)
SELECT CEIL(-1.02);

floor (向下取整,返回<=该参数的最大整数)
SELECT FLOOR(-9.99);

truncate (截断)
SELECT TRUNCATE(1.69999,1);

mod(取余)
SELECT MOD(10,-3);
SELECT 10%3;

3.日期函数

now(返回当前系统日期+时间)
select now();

curdate (返回当前系统日期,不包含时间)
select curdate ();

curtime (返回当前时间,不包含日期)
select curtime ();

可以获取指定的部分,年、月、日、小时、分钟、秒
select year(now()) 年;
select year('1998-1-1') 年;

select YEAR(hiredate) 年 FROM employees;

select MONTH(NOW()) 月;
select MONTHNAME(NOW()) 月;


str_to_date(将字符通过指定的格式转换成日期)

select str_to_date ('1998-3-2','%Y-%c-%d') AS out_put;

#查询入职日期为1992--4-3的员工信息
select * from employees where hiredate = '1992-4-3';

select * from employees where hiredate = str_to_date('4-3 1992','%c-%d %Y');
#date_format 将日期转换成字符

select date_format (now(),'%y年%m月%d日') as out_put;

#查询有奖金的员工名和入职日期(xx月/xx日 xx年)
select last_name,date_format(hiredate,'%m月/%d日 %y年') 入职日期 from employees
where commission_pct is not null;

 

猜你喜欢

转载自blog.csdn.net/weixin_40440225/article/details/82915092
今日推荐