SQL基础知识

SQL在线测验工具:http://sqlfiddle.com/#!9/a6c585/1


表的修改插入删除

1、修改
修改表名

alter table data rename to data1

修改字段值

update tabele1 set salary=salary*1.1 where id in (select id from emp)
update tabele1 set salary=replace(salary,100,105) where id=1

2、插入删除

INSERT INTO Websites (name, url, alexa, country)
VALUES ('百度','https://www.baidu.com/','4','CN');
DELETE FROM Websites
WHERE name='百度' AND country='CN';
#不删除表,删除所有行
DELETE * FROM table_name;

条件查询相关语法

WHERE Grade BETWEEN 70 AND 80

#比较操作符
OR/AND
mysql>&lt:小于 ; &gt:大于; 不等于 <>或!=,但sqlserver中不识别!=,所以建议用<>

LIKE'[BCDF]_a%' :下划线表示任意一个字符,%表示一个或多个字符。以B,C,D,F 开始且第三个字符为"a"
LIKE'[^ABCDEF]%a':^表示不以某个字符开始

IN
NOT IN: 不在
EXIST
NOT EXIST

IS NOT NULL
IS NULL

CASE WHEN
IF

#限定记录数
sql server> 最高 TOP 1 
mysql> SELECT * FROM table LIMIT 5,10; // 检索记录行 6-15  
#排序
ORDER BY ASC(从小到大);DESC(从大到小)
#分组+条件
GROUP BY 
HAVING 

#连接
SELECT student.Sname AS 有考试成绩的学生的姓名,course.Cname AS 修课名称,SC.Grade AS 考试成绩
INTO [new_sc] 
inner join SC     ON student.Sno=SC.Sno
UNION

1、exist和in的差别

  • in()只执行一次,它查出B表中的所有id字段并缓存起来.之后,检查A表的id是否与B表中的id相等,如果相等则将A表的记录加入结果集中,直到遍历完A表的所有记录.
    exists()会执行A.length次,它并不缓存exists()结果集,因为exists()结果集的内容并不重要,重要的是结果集中是否有记录,如果有则返回true,没有则返回false.

  • 如:A表有10000条记录,B表有1000000条记录,那么exists()会执行10000次去判断A表中的id是否与B表中的id相等.
    如:A表有10000条记录,B表有100条记录,那么exists()还是执行10000次,还不如使用in()遍历10000*100次,因为in()是在内存里遍历比较,而exists()需要查询数据库,我们都知道查询数据库所消耗的性能更高,而内存比较很快.

select * from A
where id in(select id from B)

2、空值处理

IS NOT NULL
IS NULL

IFNULL(expr1 , expr2)
  在 expr1 的值不为 NULL的情况下都返回 expr1,否则返回 expr2

COALESCE (expression,value1,value2……,valuen) 
如果expression不为空值则返回expression;否则判断value1是否是空值,如果value1不为空值则返
回value1;否则判断value2是否是空值,如果value2不为空值则返回value3;……以此类推,

3、IF和case when
if条件表达式

IF( 条件 , 条件为真值 , 为假值 )

case when的用法

  • 通过两个字段的情况得到一个新的字段
#根据奖金类型确定员工奖金如果奖金类型为1,则bonus字段值为工资的90%,为2则为工资的80%,其余是70%
SELECT
    salary.id,bonus_type,salary,
    case 
      when bonus_type=1 then 0.9*salary
      when bonus_type=2 then 0.8*salary
      else 0.7*salary
     end 'bonus'
FROM bonus,salary 
WHERE bonus.id = salary.id
  • 打折:根据销量和类型更新价格字段
UPDATE books
SET price=price*
    CASE 
        WHEN sales>10000 THEN 0.95
        WHEN type = 'popular' THEN 0.75
        ELSE 0.9
    END  

日期函数

#mysql用法

#当前日期
now() #2019-08-29T02:20:29Z; 
current_date() #2019-08-29; 
current_time() #02:23:15

#日期加减
DATE_ADD(OrderDate,INTERVAL 45 DAY) #在OrderDate日期上添加 45 天,也可以是HOUR,WEEK等
DATE_SUB(OrderDate,INTERVAL 5 DAY)  #在OrderDate日期上减 5 天,也可以是HOUR,WEEK等
DATEDIFF('2008-11-30','2008-11-29') #返回两个日期之间的天数,这里返回1

#日期提取,sql server是datepart函数
DATE(date) #提取日期部分,如2008-11-11
EXTRACT(YEAR FROM OrderDate) #提取OrderDate的年份,也可以是是HOUR,WEEK等
EXTRACT(YEAR_MONTH FROM '2019-08-29') #返回201908,不支持MONTH_DAY,也不支持三个

#日期格式转换
DATE_FORMAT(NOW(),'%Y-%m-%d') #将当前日期以‘2019-08-29’形式展示,小写y的话年份会变成19,大写M是August,大写D是29th

字符串函数

连接

MySQL: CONCAT()
Oracle: CONCAT(), ||
SQL Server: +

#按id分组后,将每个id对应所有的rev用,连接
SELECT id, group_concat(rev)
FROM `docs`  group by id
#按id分组后,rev排序后用_连接
group_concat(rev order by rev desc separator '_' )

截取:substr (str, pos, len)

#比如按某个字段的后两个字母排序
order by substr(name,length(name)-1,2)
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,794评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,050评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,587评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,861评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,901评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,898评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,832评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,617评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,077评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,349评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,483评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,199评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,824评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,442评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,632评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,474评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,393评论 2 352

推荐阅读更多精彩内容

  • SQL基础知识整理 0. 查看当前数据库的配置 mysql> \s -------------- mysql Ve...
    DreamLi0812阅读 343评论 0 1
  • 怎么加快查询速度,优化查询效率,主要原则就是应尽量避免全表扫描,应该考虑在where及order by 涉及的列上...
    欢欢011阅读 985评论 0 5
  • -- 数据库(database):存储数据的仓库, -- 数据库(database) --数据表(table) -...
    择喀普斯阅读 242评论 0 2
  • 巩固了下SQL的相关知识。学习网站:www.w3school.com.cn。以下知识皆是来自这个网站。大部分照着敲...
    加禄阅读 598评论 0 0
  • 在MySQL数据库怎么加快查询速度,优化查询效率,主要原则就是应尽量避免全表扫描,应该考虑在where及order...
    Java架构学习者阅读 206评论 0 0