测试常用数据库查询语句

1、多表连接查询

  1>左连接:left join........on 以lzcardapp为主表,查询出documentsampling 表中takebackno 字段相同的数据

  例:select * from lzcardapp a LEFT JOIN documentsampling b on a.takebackno = b.takebackno;

  2>右连接:right join.......on 以documentsampling 为主表,查询出lzcardapp 表中takebackno 字段相同的数据

  例:select * from lzcardapp a RIGHT JOIN documentsampling b on a.takebackno = b.takebackno;

  3>内连接:inner join ......on 取两表的交集

  例:select * from lzcardapp a inner JOIN documentsampling b on a.takebackno = b.takebackno;

  该语句等同与 ,但若追求查询速度时应选择inner join,可以将数据量较小的表放在前面,数据量较大的表放在后面

  例:select * from lzcardapp a,documentsampling b where  a.takebackno = b.takebackno;

2、去重

  1>DISTINCT:消除重复的值并至返回唯一的值,该关键字只能放在字段前,否则报错 ,并且如果跟多个字段的话,会多个字段都进行去重

  例:select DISTINCT sex,age FROM student;

3、限制查询行数

  1>limit:limit 指定行数开始(从0开始),要返回的行数

  例:select id,name,age from person limit 1.4

    返回该表从第二行开始的4条数据

4、排序

  1>关键字:order by

  例:select * from person order by age

  2>排序大小:desc,asc

  例:select * from person order by age desc ;按年龄倒序排序

  例:select * from person order by age [asc];按年龄正序排序,不写时默认按正序排序

5、条件语句

  1>    =:等于

  2>    >:大于

  3>    <>:不等于

  4>    >=:大于等于

  5>    !=:不等于

  6>    !>:不大于

  7>    <:小于

  8>    between:在指定的两个值之间,该关键字只能用于数值类型的列

  例:select * from person where age between 20 and 35; 查询年龄在20到 35之间的数据[包括20,35这两个值]

  9>    <=:小于等于

  10>   is  null:为null的值

  11>   !<:不小于

  12>   is not null:不为null的值

  13>   and:满足所有给定条件的行

  例:select * from person where sex='女' and age = '25';

  14>   or:匹配任一给定条件的行

  例:select * from person where age = '20' or age = '21';

  15>   in:范围中的每个条件都可以匹配

  例:SELECT * FROM demo where no in ('11','12','13','14','15');

  16>   not:否定其后条件

  例:SELECT * FROM my_table WHERE my_column NOT LIKE '%abc%';

  17>   like:模糊查询

  例:select * from person where name like '张%';查询姓张的数据

  例:select * from person where name like '王_三';查询所有叫王某三的数据

  18>  单字段查询

  例:select name from person

  19>   多字段查询

  例:select name,age from person;

  20>   取别名

  例:select name as '姓名',age as ‘年龄’ from person;

6、分组

  1>group by

  例:select age,count(1) from person group by age;

  2>having:过滤分组

  例:select age,count(1) as num from person group by age having number>1;

  3>having和where的区别:where在数据分组前过滤,having在数据分组后进行过滤;

7、增删改

  1>新增:insert into   表名(字段列名) values(字段值)

  例:insert into emp(id,name,sex,age) values(1,'张三','男','18');

  如果所有字段都加可以省略字段列名

  例:insert into emp values('2','李四','女','18');

  2>修改:update 表名 set 

  例:update emp set age = 18;

  例:update emp set age = 18 where name = '王五';

  例:update emp set age = 18 and sex = '男' where name = '王五';

  例:update emp set age = age + 2 where name = '王五';
  3>删除:drop:删除表及表结构并释放内存,再查询时无此表

  例:drop table test;

  truncate:删除表内容并释放空间,但再查询时还可以查到该表和表结构

  例:truncate test;

  delete:删除表或表数据,删除表时仅删除表中的所有数据,不释放空间

  例:delete from test;  删除所有数据

  例:delete from test where name = '张三'; 仅删除name为张三的数据

  delete删除整表时和truncate 的区别:

  例:同一张表,有ID为1,2,3[ID为主键唯一]的三条数据,用truncate 删除后再新增一条ID为1的数据可成功新增;但用delete删除后再新增一条ID为1的数据则会报主键重复;

8、数据常用函数

  1>instr(str,substr):返回字符串substr在字符串str第一次出现的位置(str不包含substr时返回0)

  例:select instr('foobarbar','bar')   -->4

  例:select instr('xbar','footbar')    -->0

  2>ABS(N):返回N的绝对值

  例:select abs(-2) -->2

  例:select abs(45)  -->45

  3>sign(N):返回参数的符号(为-1、0、1)

  例:select sign(-23)  -->-1

  例:select sign(0)  -->0

  例:select sign(45)  -->1

  4>mod(n,m):返回n被m除的余数

  例:select mod(234,10)   -->4

  例:select 234 % 10;  -->4

  例:select mod(29,9)  -->2

  5>floor(N):返回不大于N的最大整数值

  例:select floor(1.23)-->1

  例:select floor(-1.23)  -->-2

  6>ceiling(N):返回不小于N 的最小整数值

  例:select floor(1.23)-->2

  例:select floor(-1.23)  -->-1

  7>round(N,D):返回N的四舍五入值,保留D位小数(D的默认值为0)

  例:select round(-1.23)  -->-1

  例:select round(-1.58)   -->-2

  例:select round(1.58)   -->2

  例:select round(1.298,1)   -->1.3

  例:select round(1.298,0);   -->1

  8>EXP(N):返回e的N次方(自然对数的底)

  例:select exp(2) -->7.38905609893065

  例:select exp(-2)    -->0.1353352832366127

  9>log(N):返回N 的自然对数

  例:select log(2);  -->0.6931471805599453

  例:select log(-2);  -->null

  10>log10(N):返回N以10为底的对数

  例:select LOG10(2);   -->0.3010299956639812

  例:select LOG10(-2);  -->null

  11>pow(x,y)---power(x,y) :返回值X的Y次幂

  例:select pow(2,2);   -->4

  例:select pow(2,-2);   -->0.25

  12>sqrt(N):返回非负数N的平方根

  例:select sqrt(4);  -->2

  例:select sqrt(20);  -->4.47213595499958

  13>pi():返回圆周率

  例:select pi();    -->3.141593

  14>cos(N):返回N的余弦值

  例:select cos(pi());    -->-1

  15>sin(n):返回n的正弦值

  例:select sin(pi());    -->0

  16>tan(n):返回n的正切值

  例:select tan(pi()+1);    -->1.5574077246549018

  17>TRUNCATE(n,d):保留数字N的D位小数并返回

  例:select TRUNCATE(1.233,1);     -->1.2

  例:select TRUNCATE(1.999,1);     -->1.9

  例:select TRUNCATE(1.999,0);     -->1

  18> least(x,y,.....):返回最小值

  例:select least(2,0);   -->0

  例:select least(34.0,3.0,5.0,767.0);    -->3.0

  例:select least('B','A','C');   -->A

  例:select  least('B','A',65.2);    -->0

  19>GREATEST(x,y,.....):返回最大值

  例:select least(2,0);   -->2

  例:select least(34.0,3.0,5.0,767.0);    -->767.0

  例:select least('B','A','C');   -->C

  例:select  GREATEST('B','A',65.2);    -->65.2

  20>weekday(date):返回日期date是星期几(0=星期一,1=星期二)

  例:select weekday('1997-10-04 22:23:00');    -->5

  例:select weekday('1997-11-05');   -->2

  21>dayofweek(date):返回日期date是星期几(1=星期一,2=星期二,标准)

  例:select dayofweek('1998-02-03');   -->3

  22>dayofmonth(date):返回日期date在一月中是第几日(在1-31范围内)

  例:select dayofmonth('1998-02-03');   -->3

  23>dayofyear(date):返回日期date在一年中的第几日(在1-366范围内)

  例:select dayofyear('1998-02-03');     -->34

  24>month(date):返回日期date中的月份数值

  例:select month('1998-02-03');    -->2

  25>dayname(date):返回date是星期几(按英文返回)

  例:select dayname('1998-02-05');   -->Thursday

  26>monthname(date):返回date是几月(按英文返回)

  例:select monthname('1998-02-05');   -->February

  27>quarter(date):返回date是一年中第几个季度

  例:select quarter('1998-02-05');   -->1

  28>week(date,first):返回date是一年中的第几周(first默认值为0,取值1表示周一为一周的开始,取值0表示周日为一周的开始)

  例:select week('1998-02-20');    -->7

  例:select week('1998-02-20',0);   -->7

  例:select week('1998-02-20',1);   -->8

  29>year(date):返回date的年份(1000-9999)

  例:select year('98-02-03');    -->1998

  30>hour(time):返回time的小时数(取值0-23)

  例:select hour('10:05:03');     -->10

  31>minute(time):返回time的分钟数(取值0-59)

  例:select minute('98-02-03 10:05:03');   -->5

  32>second(time):返回time的秒数(取值0-59)

  例:select second('98-02-03 10:05:03');   -->3

  33>curdate();

  例:select curdate();  ---> 1997-12-15

  例:select curdate()+0;   -->19971215

  34>curtime()

  例:select curtime();   -->12:23:12

  例:select curtime()+0;   -->122312

  35>now()

      sysdate()

  例:select now();   -->2023-09-05 16:00:34

  例:select  sysdate();    -->2023-09-05 16:01:08

  例:select now()+0;   -->20230905160034

  36>UNIX_TIMESTAMP():返回一个Unix时间戳(从‘1970-01-01 00:00:00’开始的秒数,date默认为当前时间,可省略)

  例:select UNIX_TIMESTAMP();      -->1693900940

  例:select UNIX_TIMESTAMP('1992-02-18 23:59:00');     -->698428740

  37>SEC_TO_TIME(seconds);以'HH:MM:SS'或HHMMSS格式返回秒数转成的time值

  例:select SEC_TO_TIME(2378);    -->00:39:38

  例:select SEC_TO_TIME(2378)+0;        -->3938

  38>TIME_TO_SEC(time);返回time值有多少秒

  例:select TIME_TO_SEC('22:23:00');     -->80580

  例:select TIME_TO_SEC('00:39:38');     -->2378

posted @ 2023-08-10 16:13  堇色安年  阅读(47)  评论(0编辑  收藏  举报