应付一下面试应该靠这些够了
参考书 SQL必知必会
1.数据选择
select:
select keyid from table 选择某一列
select * from table 选择所有列
select keyid1,keyid2,..from table 选择几列
2.排序
select+order by keyid,
3.过滤
select +where (注意order by 放在where语句之后)
where子句的操作符 = (相等) <> !=(不等,要根据不同的DBMS来选择,具体使用的时候要查一下) < ,<=, >, >=(小于,小于等于,大于,大于等于) !<,!>(不小于,不大于) BETWEEN IS NULL
例如:
select keyid from table where keyid1 between ** and ** 或者是 where keyid =null
4.高级数据过滤:
where+and 和or in 以及not
where not keyid =**; where key id in (**,**)
通配符过滤:like+ % (匹配多个字符) _(匹配一个) []指定一个子字符集必须匹配指定位置
5.计算字段拼接:
+ 或者|| 或者concat
例如:
select vend_name + '(' +vend_country+')' from Vendors ordered by vend_name;//+可以改成||效果一样
mysql或者MariaDb需要使用如下:
select Concat(vend_name,'(',vend_country,')').......;
6.使用别名:As关键字
7.函数处理数据:(不同的DBMS不一样,使用时注意选择合适的)
提取字符串的组成部分:substring() mid() substr()
数据类型转换cast() convert()
提取日期: Now() curdate() date() getdate()
LTRIM() RIRIM()函数用于去除左右边空格空格。
日期和时间处理函数:datepart() to_date()
数值处理:abs() cos()sin() pi() sqrt() tan()
8 数据汇总
avg(keyid) as **(使用别名) 返回某列平均值
count() 返回某列行数 可以联合where来使用
例如 select count(keyid) as **(别名) form table where keyid2=**;
max() min() 某列最大最小值
sum() 某列值之和
9 数据分组
group by 和 having
使用分组可以将数据分成多个逻辑组,对每个组进行聚集计算。
group+having 可以过滤分组 (where 是对行过滤而having是对分组过滤)
例如:select cust_id,count(*) As orders from Orders group by cust_id having count(*)>=2;
10. 联结
根据关系表的联系 来创建 最简单的一种就是where table1.keyid1 = table2.keyid1
如果不加以联结 会出现笛卡尔积 也就是cross join.
where创建的是等值联结,基于两个表之间的等值测试。也称为内联结,也可以用以下的方式进行:
内联结:
select keyid1 ,keyid2,keyid2 from table1 inner join table2 on table1.keyid =table2.keyid;
高级联结:自联结 自然联结 外联结
自联结:where语句 + and来自联结。自联结通常作为外部语句。感觉和子查询差不多
自然联结:排除多次出现每一列只返回一次。
用where and +(select *)
外联结:left(rigth) outer join:外联结的修饰词为right和left ,right指出的是outer join右边的表而left指的是outer join左边的表。
11. 其他表操作:
插入:insert into table( *,* ,* , ) values ( *,* ,* ,) 表的列与value值对应就好
select * into
更新数据 update table set ....
删除:delete from table where..删除一行
创建表 creat table tablename (keyid ,type,value)
更新表:alter table
删除表:drop table tablename