sql语言关键字

sql语言关键字,第1张

1.select 选择

2.slias 别名

3.distinct 查询内容去重

4.nvl null值替换函数

5.|| 合并多列和特殊字符 字符串拼接

6.col 格式化显示结果

7.order by 排序

8.desc 降序

9.asc 升序,可省略

10.where 筛选结果

11.between a and b 在ab之间

12.in(a,b,c)在abc之中

13.like 模糊匹配 % 匹配多个字符 _ 匹配一个字符 escape 指定转义字符

14.is not null 不为空

15 lower 转为小写

16.upper 转为大写

17. initcap 转为首字母大写掐字母小写

18.concat 字符串拼接

19.substr(str,star,length)字符串截取(1开始)

20.length 获取字符串长度

21.nvl(null_col,var) 转换空值

22.round(str,n) 四舍五入

23.trunc(str,n) 只舍不入

24.mod(arg1,arg2) 取余

25.sysdate 获取系统当前时间

26.months_between(a,b) 两个日期相差几个月

27.add_months(args,x) 返回args往后推x月的日期

28.next_day(data,n) data后的下一个星期n的日期

29.last_day(data) data所在月份的最后一天的日期

30.round('日期','格式') 日期n舍n+1入

31.trunc 日期截取 只舍弃

32.to_char 将日期转换成字符串

33.to_number 将日期转换成数字

34.to_date 将字符转换为日期

一、关键字执行顺序

1、查询中用到的关键词主要包含六个,并且他们的顺序依次为 :

select--from--where--group by--having--order by 其中select和from是必须的,其他关键词是可选的。

这六个关键词的执行顺序,与sql语句的书写顺序并不是一样的,而是按照下面的顺序来执行

from--where--group by--having--select--order by。

注意:虽然select在having后执行,但是mysql中仍然可以在having中使用select语句定义的别名。

原因分析:mysql在查询的时候会产生一个临时表,所有的字段名称(别名)在临时表中已经产生,产生了临时表之后才会进行having *** 作。也就是说mysql内部有一定的解析顺序,解析顺序select优先于having。在这里我个人认为是mysql可能没有将这一点做规范。Oracle中having无法使用select语句内的别名。

2、insert into 和replace into和merge into

insert into是mysql的基本插入语句。replace into 是mysql中的代替插入语句,可以理解为insert into的升级版。replace into在执行的时候,首先会根据指定的主键或者唯一索引判断当前表中是否存在指定的主键或索引,如果主键或唯一索引已经存在,则先将对应的索引的数据删除,然后在索引位置插入replace into中包含的数据。如果主键和唯一索引没有存在,则直接在索引位置插入replace into中包含的数据。merge into 是oracle数据库中的代替插入语句。实现方式和replace into类似。执行效率:如果指定索引位置没有数据,insert into和replace into执行效率相差无几,二者效率相同。如果指定位置索引已经存在,insert into语句不能正常执行,replace into语句可以正常执行。注意:虽然replace into比较好使用,但是也存在一定风险:replace每次要重新分配自增idreplace中执行delete时, 在有外键的情况下会很麻烦如果delete时定义的有触发器, 则会被执行副作用也会被传播到replica slave.推荐使用INSERT INTO … ON DUPLICATE KEY UPDATEON DUPLICATE KEY UPDATE是mysql特有的一个sql关键字,只能在mysql中使用。

在MySQL数据库中,如果在insert语句后面带上ON DUPLICATE KEY UPDATE 子句,而要插入的行与表中现有记录的惟一索引或主键中产生重复值,那么就会发生旧行的更新;如果插入的行数据与现有表中记录的唯一索引或者主键不重复,则执行新纪录插入 *** 作。

比如有这样一张表:

create table func(id int primary key,count int,birthday date)

insert into func values(1,1,'1990-09-09')--插入一条数据

insert into func values(1,1,'1990-09-09') on duplicate key update count = count+1--表中有数据,删除原表数据,将新数据插入。

提示两行受到影响,说明先执行的删除 *** 作,然后插入新的数据。

观察到没有任何新数据插入,count字段被更新。(count字段更新是因为刚刚的插入语句中书写了update count = count+1)

如果不希望任何字段更新,可以写成如下格式:

insert into func values(1,1,'1990-09-09') on duplicate key update count = values(count)--再次执行,没有新数据插入到数据库中。

二、mysql内置函数

内置函数众多,不需要每一个都掌握,熟练掌握几个在以后使用即可。可以查看mysql官方文档学习内置函数。

三、其它注意事项

1、在已经存在的表中添加外键。(仅作为了解内容)

alter table tb_name add constraint fk_name foreign key (tb_name.id) references tb_stu(id)

例如:alter table emp add constraint forkey foreign key(dept_id) references dept(id)

该语句是在 tb_name表上添加一个外键约束,引用 tb_stu的主键,fk_name是约束的名字。

删除约束:alter table tb_name drop constraint fk_name ;

2、外键的使用情景:

在不要求吞吐速度而对数据的正确性和安全性要求较高时,推荐使用外键。

如果面对高吞吐量,要求优先保证读取效率时,则不推荐使用外键。

3、删除的时候使用别名:

原句:delete from employee where id = 1

别名:delete e from employee as e where id =1


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11834107.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-19
下一篇2023-05-19

发表评论

登录后才能评论

评论列表(0条)

    保存