sql个人总结2

前一篇说了sql语句的数据库操作,这一篇就说下表的操作。

1:先说下表的插入,更新,删除这些操作。

a:插入 insert

规正式的插入:

/* insert into tablename(column) values(?) */
/* column也可以没有,可以是一张表,没有值的列用null补齐 */
insert into student(sid,sname) values(1,'1')
insert into student values(2,null)

带有查询的插入:

insert into role(rid,rname) select sid,sname from student where sid=2 

b:更新 update

/* update tablename set column=value,column=value,column=value where condition */
update role set rname='2',sid=2
update role set rname='b' where sid in (select sid from student where sid='1')

c:删除 delete

/* delete from tablename where condition */
delete from student where sid=3
delete from role where sid in (select sid from student where sid=2)

2:基本的单表查询

a:格式及注意事项

/* select all/distinct from (tablename or viewname) where group by column having condition order by column asc/desc*/
/* ditinct为区别同一列,作用在整个查询范围,不特指那一列,一个简单查询只能出现一次 */

b:转换大小写

select rid,upper(rname),1-sid,rtest from role    --upper为改变为大写,lower<span style="font-family:SimSun;">为小写</span>

c:查询字符串

select rid,'a' from role                         --查询特殊值字段

d:使用别名改变查询查询标题

select rid RID,upper(rname)RNAME,1-sid RSID,rtest RTEST from role --使用列别名改变查询列标题

e:between的用法

select * from role where rid between 1 and 3     --between的用法,如果不在,在between前加not关键字

f:in的用法

select * from role where rid in(1,2,3)           --in的使用方法

g:模糊查询,以及去掉通配符

select * from role where rtest like '%2'         --%为任意长度的字符串 _为单个长度的任意字符
select * from role where rtest like '2%3' escape '2' --如果%不是通配符,只是普通的符号,我们用escape来排除,这里需要注意的是排除的是你选则的字符的后面的

h:null值得使用

select * from student where sname is null        --这里的null前面的is不能用=代替

i:升序和降序

select * from role order by rid asc,sid desc     --这里是根据rid的升序和sid的降序进行排序

j:聚集函数

/* count(*)
   count(column) --计数
   sum(column)   --求和
   avg(column)   --求平均数
   max(column)   --最大值
   min(column)   --最小值
   --除count(*),剩下的只处理非空
*/

k:group by分组

select sno,COUNT(*) from sc  where grade>90 group by sno having COUNT(*)>3 --这里仅做实例,查询有三门课程90分以上的学生的学号

3:连接查询

a:等值连接查询

select rid,r.sid from role r inner join student on r.sid=student.sid  --内链接相当于直接用等号
select rid,r.sid from role r left join student on r.sid=student.sid   --左链接,取第一个表中的所有数据,第二个表中没有的以null补齐,是left outer join的缩写
select rid,r.sid from role r right join student on r.sid=student.sid  --右连接,取第二个表中的所有数据,第一个表中没有的以null补齐,是right outer join的缩写
select * from role r full join student on r.sid=student.sid  --全链接,取二个表的所有数据,第一个表中没有以null补齐,第二个表中没有以null补齐

b:嵌套查询

--子查询不允许出现排序,即order by
--exists先执行前面的查询,再执行exists里面的
select role.* from role where role.sid  in(select student.sid from student)    --in查询,由里向外查询,嵌套查询越多越慢,就不如等值连接的查询速度了,一般可以用等值连接转换
select role.* from role where role.sid < any (select student.sid from student) --any为某一个值,all为所有值,<>为!=,意思是可能大于可能小于
select r.* from role r where exists(select s.sid from student s where s.sid=r.sid)  --in和exists一般能够互换,exists为存在,判断子查询是否为空值

c:集合查询

/* 集合查询 */
--union 并集,必须有相同数量的列,数据类型也必须相同,顺序也必须相同
select * from student where sid=1 union select * from student where sid=2
--intersect 交集
select sid from role intersect select sid from student
--ecxcept 差集,多的集合放前面
 select sid from student except select sid from role

4:视图

a:创建视图

create view role_view as select * from role with check option  --不能含有 order by 和 distinct,只是把定义存入存入数据字典,并没有执行
 --with check option 防止用户通过视图对不属于视图范围内的数据进行更新
 --group by 视图不能更新,表达式,聚集函数也不能更新

b:删除视图

drop view role_view

基本的操作就这些,里面的细节没有说,因为关于sql基本的大家都知道,但sql的优化是一件很重要和复杂的事,sql的优化最主要的还是优化对索引使用。

时间: 2024-10-15 10:27:57

sql个人总结2的相关文章

SQL查询字段添加括号报错:Operand should contain 1 column(s)

SQL语句:查询连个字段的信息 SELECT (menu_id,menu_captions) FROM bsdb.menulist a WHERE a.menu_id like ('2_'); 然后,因为这是在存储过程中的一个语句所以,在执行存储过程的时候编译不会报错,但是执行的时候却汇报错:Operand should contain 1 column(s):原因不好解释: 下面是官方发解释(MYSQL):https://dev.mysql.com/doc/refman/5.0/en/row-

SQL Server 2008的MSSQLSERVER 请求失败或服务未及时响应

我的是SQL server 2008R2, 以前可以正常的启动SQL server(SQLEXPRESS).SQL server(MSSQLSERVER),有几天没有打开了,就在昨天 开机之后就无法启动MSSQLSERVER了,提示的信息如下图: 快速解决办法如下: 第一步:打开事件查看器,查看windows日志,点击应用程序,查看windows错误日志 http://product.pconline.com.cn/itbk/software/win8/1211/3060037.html 第二步

【Kettle】4、SQL SERVER到SQL SERVER数据转换抽取实例

1.系统版本信息 System:Windows旗舰版 Service Pack1 Kettle版本:6.1.0.1-196 JDK版本:1.8.0_72 2.连接数据库 本次实例连接数据库时使用全局变量. 2.1 创建新转换:spoon启动后,点击Ctrl+N创建新转换 2.2 在新转换界面中,右键点击DB连接,系统会弹出[数据库连接]界面. windows系统环境下,可用${}获取变量的内容. 说明: 连接名称:配置数据源使用名称.(必填) 主机名称:数据库主机IP地址,此处演示使用本地IP(

sql常用格式化函数及字符串函数

一.常用格式化函数 1.日期转字符串 select to_char(current_timestamp, 'YYYY-MM-DD HH24:MI:SS') //2017-09-18 22:41:50 YYYY:年(4和更多位) MM:月份号(01-12) DD:一个月里的日(01-31) HH24:一天的小时数(00-23) MI:分钟(00-59) SS:秒(00-59) 2.字符串转日期 select to_date('2017-09-18','YYYY-MM-DD') //2017-09-

Bootstrap + AngularJS+ Ashx + SQL Server/MySQL

去年年底12月,为适应移动端浏览需求,花了1个月时间学习Bootstrap,并将公司ASP网站重构成ASP.NET. 当时采取的网站架构: Bootstrap + jQuery + Ashx + SQL Server 时间紧,没人带,只能硬着头皮,最后如期完成,但是也遗留了几个问题. 问题: 1.页面查询条件太复杂,太多的checkbox,jQuery操作DOM虽然方便,但是组合成json提交给后端还是比较麻烦,有没有天然支持json的前端框架或者脚本语言? html控件做的任何修改,都自动保存

Spark SQL 之 Join 实现

原文地址:Spark SQL 之 Join 实现 Spark SQL 之 Join 实现 涂小刚 2017-07-19 217标签: spark , 数据库 Join作为SQL中一个重要语法特性,几乎所有稍微复杂一点的数据分析场景都离不开Join,如今Spark SQL(Dataset/DataFrame)已经成为Spark应用程序开发的主流,作为开发者,我们有必要了解Join在Spark中是如何组织运行的. SparkSQL总体流程介绍 在阐述Join实现之前,我们首先简单介绍SparkSQL

PL/SQL developer 连接oracle数据库报错“initialization error could not load oci.dll”

声明:PL/SQL 版本:PL/SQL Developer 9.0.6 (http://files.allroundautomations.com/plsqldev906.exe) 报错提示如图: 原因:PL/SQL只对32位OS进行支持,解决方法是额外加载一个oci.dll文件 解决办法:1.下载OCI.DLL相关库文件.地址: (需注册Oracle账号) http://www.oracle.com/technetwork/topics/winsoft-085727.html ----->  

WAF——针对Web应用发起的攻击,包括但不限于以下攻击类型:SQL注入、XSS跨站、Webshell上传、命令注入、非法HTTP协议请求、非授权文件访问等

核心概念 WAF Web应用防火墙(Web Application Firewall),简称WAF. Web攻击 针对Web应用发起的攻击,包括但不限于以下攻击类型:SQL注入.XSS跨站.Webshell上传.命令注入.非法HTTP协议请求.非授权文件访问等.

sql

use simulation; # 多条SQL语句必须以分号分隔 show DATABASES ; show TABLES ; show COLUMNS from customers; # SQL语句不区分大小写 SHOW COLUMNS FROM products; SHOW COLUMNS FROM vendors; SHOW COLUMNS FROM orders; SHOW COLUMNS FROM productnotes; SHOW COLUMNS FROM orderitems;

MyBatis学习(四)XML配置文件之SQL映射的XML文件

SQL映射文件常用的元素: 1.select 查询语句是MyBatis最常用的语句之一. 执行简单查询的select元素是非常简单的: <select id="selectUser" parameterType="int" resultType="hashmap"> SELECT * FROM PERSON WHERE ID = #{id} </select> 这个语句被称作selectUser,接受一个int类型的参数,