SQL之DQL数据查询语言

第三篇

DQL:数据查询语言

--select:选择

一、基本查询语句:至少要有两个子句。

1、

select子句和from子句

格式1:可以指定字段进行查询

   select colName[,colName.....] from tableName

格式2:查询整张表:

  select * from tableName;

通配符*:如果是在select字句中,代替的是所有的字段。

 

2、给查询显示的列,起别名

  格式:

  select ename [as] "员工姓名"[,colName as nickName....] from tableName tableNickName

 

3、where子句:

  作用:起到条件限制约束等操作。有过滤的作用。

  位置:放在 from子句后。

  格式:

     select colName from tableName where 条件

 

  条件:关系运算符:

       >,>=,<,<=,=,!=,<>。

 

(1)null在条件中,应该使用is 或者is not

(2)范围查询:针对于某一个字段来说

  1:可以使用>,>=和<,<=来进行范围限制

  2: 还可以使用between  and来限制。

格式: 

colName [not] between val1 and val2;

注意: between val1 and  val2 相当于闭区间[val1,val2]

(3)集合作为条件写法:同一个字段有多个值的情况下使用。

  使用:in|not in

  格式:   colName  [not] in (元素1,元素2,....);

  注意:in 相当于 or

       not in  相当于  and

 

 

集合的其他用法:

  注意:mysql数据库中,集合元素的来源只能基于一张表的查询。不能写定值。

  all与any

  格式:  

      >all(元素1,元素2,元素3......)

      :大于集合中最大的元素。

      <all(元素1,元素2,元素3......)

      :小于集合中最小的元素。

      >any(元素1,元素2,元素3......)

      :大于集合中最小的元素。

      <any(元素1,元素2,元素3......)

      :小于集合中最大的元素。

 

(4)模糊查询:like关键字

   格式:  colName like  value。

   通常与通配符%连用

   %:0或0个以上的字符

   _:匹配一个字符。

   reg:  查询员工姓名第二字母是s的信息

 

     ename  like  '_s%'

  练习和方法:

--修改表的字段名

--格式:alter table tableName change [column] oldColName newColName newType;

--修改表的名称

--格式:alter table oldTableName rename [to] newTableName;

--小贴士:DDL语言都有关键字 table

--        DML语言直接写表名,没有table关键字

 

--mysql函数之字符串函数(续)

--1、locate(substr,str)/position(substr in str)/instr(str,substr)

--作用:返回substr在str第一次出现的位置。如果没有,返回0;

--练习1:计算出'zuo'在'no zuo no die'第一次出现的位置。

select locate('zuo','no zuo no die');

--练习2:计算'bar'在'foobarfoobarfoo'中第一次出现的位置

select position('bar' in 'foobarfoobarfoo');

--练习3:计算'baa'在'foobarfoobarfoo'中第一次出现的位置

select instr('foobarfoobarfoo','baa');

 

--2、locate(substr,str,pos)

--作用:从str的下标pos开始向后查找,substr第一次出现的位置。找不到返回0

--练习1:查找'bar'在'foobarfoobarfoo'中 第二次出现的位置。

select locate('bar','foobarfoobarfoo',locate('bar','foobarfoobarfoo')+1);

 

--3、lpad(str,len,padstr)/rpad(str,len,padstr);

-- 作用:在字符串str的左边/右边添加padstr,添加后的总长度为len。

--    可称之为左补全/右补全函数

--          右对齐/左对齐函数

--练习1:在'bar' 左边添加#,总长度为10;

--练习2: 在foo右边添加#,总长度为12;

--练习3:查询emp表中的员工姓名,右对齐,总长度为20。

select lpad(ename,20,' ') from emp;

 

--练习4:left(str,len)/right(str,len) 

-- 作用:返回字符串左端/右端的len个字符。

--练习1: 获取'helloworld'的左端和右端的4个字符。

select left('helloworld',4), right('helloworld',4);

 

--5、substring(str,pos)/substring(str from pos)

--作用:截取str的子串,从pos下标开始截取到最后。

--练习1:截取"no zuo no die",从下标4开始截取

--练习2:截取"no zuo no die"的最后六个字符。

select substring('no zuo no die',4);

select substring('no zuo no die',-6);

 

--练习3.substring(str,pos,len)/substring(str from pos

for len)/mid(str,pos,len)  

--作用:对str进行截取操作,从pos下标开始,截取len长度个。

--小贴士:数据库的字符串的下标从1开始。

--练习1:对"i like you"进行截取,从第三个位置开始,截取4个长度

select substring('i like you',3,4);

select substring('i like you' from 3 for 4);

select mid('i like you',3,4);

--练习2: 截取like字样。

select substring('i like you',locate('like','i like you'),length('like'));

 

--7、substring_index(str,delim,count)

--作用:截取str,截取到第count个分隔符delim

--练习1:截取'www.mysql.com',截取到第二个"."

select substring_index('www.mysql.com','.',2);

--练习2: 截取'www.mysql.com',从倒数第二个'.'开始截取。

select substring_index('www.mysql.com','.',-2);

 

--8、ltrim(str)/rtrim(str) 

--作用:删除str的左端/右端的空格

--练习1:删除'    bar  '字符串的左右空格。

select ltrim(rtrim('    bar  ')), length(ltrim(rtrim('    bar  ')));

--9、trim([[both | leading | trailing] [remstr] from] str);

--作用: 删除str里两端的remstr。

--  左右两端由 both|leading|trailing来控制

--  默认情况:both

--练习1:删除' hello '前后的空格

select trim(' hello '),trim(both ' ' from ' hello ');

-- 10、replace(str,from_str,to_str)  

-- 作用:使用to_str替换掉str中的from_str;

--练习1: 使用'#' 替换掉'hellohello'里的"ll";

select replace('hellohello','ll','#');

--练习2: 使用'#' 替换掉'hellohello'里的"l";

select replace('hellohello','l','#');

 

--11、insert(str,pos,len,newstr)  

--作用:使用newstr替换str中的一部分,这部分从pos下标开始,len个。

--练习: 使用"mysql"替换掉"i like you"中的'you';

select insert('i like you',8,3,'mysql');

 

--12、lcase(str)/lower(str)/ucase(str)/upper(str)

-- 作用:将字符串中的英文字母全变成大/小写。

--练习:将‘I like yourName 3’变成全大写 /全小写。

select lower('I like yourName 3'),upper('I like yourName 3');

 

--mysql函数之数学函数。

--1、abs(n)

--作用:取参数n的绝对值

--练习1:  获取 5 和-10的绝对值

select abs(5),abs(-10);

 

--2、sign(n)

--作用:判断参数的符号,

--    如果是正数,返回1,

--    如果是负数,返回-1,

--    如果是0,返回0;

--练习:查看  1+2+(-2*3)的正负情况

select sign(1+2+(-2*3));

--3、mod(m,n):

--作用:返回m对n的取余的结果。同(m%n);

--练习:使用不同方式,计算10对4的取余操作。

select mod(10,4),10%4;

select mod(-10,4),10%4;

select mod(10,-4),10%4;

select mod(-10,-4),10%4;

 

--4、floor(n)/ceiling(n)

--floor(n) 返回小于等于n的最大整数,向下取整

--ceiling(n) 返回大于等于n的最小整数。向上取整

--练习: 分别使用两个函数对 -3.14 和 0.618 操作。

select floor(-3.14),ceiling(-3.14),floor(0.618),ceiling(0.618);

 

--5、round(n,d)

--作用:对n进行四舍五入,保留d位小数。

--练习1:对12345.6789分别保留到百位,整数位,小数点后2位。

select round(12345.6789,-2),round(12345.6789),round(12345.6789,2);

 

--6、pow(x,y)/power(x,y)

--作用:计算x的y次方

--练习 计算10的3次方

select pow(10,3);

 

--7、sqrt(n)

-- 作用:对n进行开平方。

--练习: 计算64的平方根。

select sqrt(64);

 

--8、rand()

--作用:返回0~1.0的一个随机小数。

--练习: 获取一个随机数

select rand();

select rand(2);

 

--9、truncate(n,d)

-- 作用:对数值n进行截断。

--  d为正数时,保留小数点后d位。

--  d为0时,保留整数位。

--  d为负数时,保留小书店前d位。

--练习:对12345.12进行保留1位小数,保留整数位,保留到千位。

select truncate(12345.12,1),truncate(12345.12,0),truncate(12345.12,-3);

--least(n.....)/greatest(n....);

--作用:统计多个参数中的最小值/最大值。

--注意:参数类型可以不一致,但是必须能互相自动转换

--练习:统计1,2,'10','5'中最小值和最大值。

select least(1,2,'10','5'),greatest(1,2,'10','5');

--练习:统计三个日期中的最小和最大的

select least('2018-09-05','2017-12-12','2017-09-05');

select greatest('2018-09-05','2017-09-05','2017-12-12');

 

--mysq函数之日期时间函数

--1、dayofweek(date)

--作用:查看指定日期date是所在周的第几天,返回的是数字

--    1--周日.......7--周六

--练习1:查看2018-9-5是所在周的第几天

select dayOfWeek('2018-9-5');

--2、weekday(date)

--作用:返回指定date是所在周的周几。返回的也是数字

--    0-周1........6--周日

--练习1:查看2018-9-5是周几

select weekday("2018-9-5");

--3、dayname(date)

--作用:返回指定日期是周几,注意:返回的是英文描述。

--练习:查看自己的出生年月日是周几

select dayname('1986-11-08');

--4、dayofmonth(date)/dayofyear(date);

--作用:返回指定日期是当月/当年的第几天

--练习:查看出生日期是当年的第几天

select dayofyear('1986-11-08');

--5、monthname(date)

--作用:返回指定日期所在月的英文描述。

--练习:输出出生年月所在月的英文描述。

select monthname('1989-11-12');

--6、week(date,first)

-- 作用:返回指定日期是当年的第几周。first可以取值0或1.

--    0表示周日是一周的第一天,1表示周1是一周的第一天。

--练习:查看当前系统时间是今年的第几周。

select week('2018-9-5',1);

--7、year(date),month(date),hour(time),minute(time),second(time)

--作用:返回指定日期或时间的时间分量。

--练习:获取当前系统时间now()的时,分,秒。

select hour(now()),minute(now()),second(now()),year(now())

--8、extract(part from date);

--作用:截取指定日期的一部分,part:year,month,day,hour,minute,second;

--练习: 截取当前系统时间的时间分量

select extract(year from now()),extract(day from now());

--9、date_format(date,format)

--作用:将指定日期date,按照自定义格式,转成字符串显示。

--格式:   年:    %y

--       月:    %M或%m

--       日:    %d

--练习:  将当前系统时间格式化   yyyy年mm月dd日 mm分ss秒HH时。

select now();

select date_format(now(),'%Y年%m月%d日 %i分%s秒%H');

--10、curdate()/curtime();

--作用:获取当前系统的日期/时间

select curdate(),curtime();

--11、now()/sysdate()/current_timestamp();

--获取当前系统时间:都包含年月日时分秒。

select now(),sysdate(),current_timestamp();

--12、sec_to_time(n)

--作用:将指定数值n转成时间格式

--练习:计算一下36001转成时间格式

select sec_to_time(36001);

--13、time_to_sec(time)

--作用:将指定时间转成秒的总数。

--练习:将'13:56:56'转成秒数。

select time_to_sec('13:56:56');

select time_to_sec(now());--只转时间部分。

--练习.计算一下自己活了多少个月

select period_diff('201809','199607');

猜你喜欢

转载自blog.csdn.net/qq_42721694/article/details/82530845