测试常用数据库查询语句
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