sql学习,怎样学习sql
大家好,今天小编来为大家解答sql学习这个问题,怎样学习sql很多人还不知道,现在让我们一起来看看吧!
SQL语句学习大全
创建数据库
创建之前判断该数据库是否存在 if exists(select* from sysdatabases where name='databaseName') drop database'databaseName' go Create DATABASE database-name
删除数据库
drop database dbname
备份sql server
---创建备份数据的 device USE master EXEC sp_addumpdevice'disk','testBack','c:\mssql7backup\MyNwind_1.dat'---开始备份 BACKUP DATABASE pubs TO testBack
创建新表
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)根据已有的表创建新表: A:create table tab_new like tab_old(使用旧表创建新表) B:create table tab_new as select col1,col2… from tab_old definition only
删除新表
drop table tabname
增加一个列
Alter table tabname add column col type注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。
添加主键
Alter table tabname add primary key(col)说明:删除主键: Alter table tabname drop primary key(col)
创建索引
create [unique] index idxname on tabname(col….)删除索引:drop index idxname on tabname注:索引是不可更改的,想更改必须删除重新建。
创建视图
create view viewname as select statement删除视图:drop view viewname
几个简单的基本的sql语句
选择:select* from table1 where范围插入:insert into table1(field1,field2) values(value1,value2)删除:delete from table1 where范围更新:update table1 set field1=value1 where范围查找:select* from table1 where field1 like’%value1%’(所有包含‘value1’这个模式的字符串)---like的语法很精妙,查资料!排序:select* from table1 order by field1,field2 [desc]总数:select count(*) as totalcount from table1求和:select sum(field1) as sumvalue from table1平均:select avg(field1) as avgvalue from table1最大:select max(field1) as maxvalue from table1最小:select min(field1) as minvalue from table1[separator]
几个高级查询运算词
A: UNION运算符 UNION运算符通过组合其他两个结果表(例如 TABLE1和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL随 UNION一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1就是来自 TABLE2。 B: EXCEPT运算符 EXCEPT运算符通过包括所有在 TABLE1中但不在 TABLE2中的行并消除所有重复行而派生出一个结果表。当 ALL随 EXCEPT一起使用时(EXCEPT ALL),不消除重复行。 C: INTERSECT运算符 INTERSECT运算符通过只包括 TABLE1和 TABLE2中都有的行并消除所有重复行而派生出一个结果表。当 ALL随 INTERSECT一起使用时(INTERSECT ALL),不消除重复行。注:使用运算词的几个查询结果行必须是一致的。
使用外连接
A、left outer join:左外连接(左连接):结果集既包括连接表的匹配行,也包括左连接表的所有行。 SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a= b.c B:right outer join:右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。 C:full outer join:全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。
[编辑本段]提升
复制表
(只复制结构,源表名:a新表名:b)(Access可用)法一:select* into b from a where 1<>1法二:select top 0* into b from a
拷贝表
(拷贝数据,源表名:a目标表名:b)(Access可用) insert into b(a, b, c) select d,e,f from b;
跨数据库之间表的拷贝
(具体数据使用绝对路径)(Access可用) insert into b(a, b, c) select d,e,f from b in‘具体数据库’ where条件例子:..from b in'"&Server.MapPath("."&"\data.mdb"&"' where..
子查询
(表名1:a表名2:b) select a,b,c from a where a IN(select d from b或者: select a,b,c from a where a IN(1,2,3)
显示文章、提交人和最后回复时间
select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b
外连接查询
(表名1:a表名2:b) select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a= b.c
在线视图查询
(表名1:a select* from(Select a,b,c FROM a) T where t.a> 1;
between的用法
between限制查询数据范围时包括了边界值,not between不包括 select* from table1 where time between time1 and time2 select a,b,c, from table1 where a not between数值1 and数值2
in的使用方法
select* from table1 where a [not] in(‘值1’,’值2’,’值4’,’值6’)
删除主表中已经在副表中没有的信息
两张关联表delete from table1 where not exists( select* from table2 where table1.field1=table2.field1
四表联查问题
select* from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where.....
日程安排提前五分钟提醒
SQL: select* from日程安排 where datediff('minute',f开始时间,getdate())>5
一条sql语句搞定数据库分页
select top 10 b.* from(select top 20主键字段,排序字段 from表名 order by排序字段 desc) a,表名 b where b.主键字段= a.主键字段 order by a.排序字段
前10条记录
select top 10* form table1 where范围
选择排名
选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.) select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)
派生结果表
包括所有在 TableA中但不在 TableB和TableC中的行并消除所有重复行而派生出一个结果表(select a from tableA except(select a from tableB) except(select a from tableC)
随机取出10条数据
select top 10* from tablename order by newid()
随机选择记录
select newid()
删除重复记录
Delete from tablename where id not in(select max(id) from tablename group by col1,col2,...)
列出数据库里所有的表名
select name from sysobjects where type='U'
列出表里的所有的
select name from syscolumns where id=object_id('TableName')
列示排列
列示type、vender、pcs字段,以type字段排列,case可以方便地实现多重选择,类似select中的case。 select type,sum(case vender when'A' then pcs else 0 end),sum(case vender when'C' then pcs else 0 end),sum(case vender when'B' then pcs else 0 end) FROM tablename group by type显示结果: type vender pcs电脑 A 1电脑 A 1光盘 B 2光盘 A 2手机 B 3手机 C 3
初始化表table1
TRUNCATE TABLE table1
选择从10到15的记录
select top 5* from(select top 15* from table order by id asc) table_别名 order by id desc
数据类型转换
declare@numid int declare@id varchar(50) set@numid=2005 set@id=convert(varchar,@numid)通过上述语句完成数据类型Int转换成varchar,其他转换类似,可参看convert函数
[编辑本段]技巧
1=1,1=2的使用
在SQL语句组合时用的较多“where 1=1”是表示选择全部“where 1=2”全部不选,如: if@strWhere!=' begin set@strSQL='select count(*) as Total from ['+@tblName+'] where'+@strWhere end else begin set@strSQL='select count(*) as Total from ['+@tblName+']' end我们可以直接写成 set@strSQL='select count(*) as Total from ['+@tblName+'] where 1=1安定'+@strWhere
收缩数据库
--重建索引 DBCC REINDEX DBCC INDEXDEFRAG--收缩数据和日志 DBCC SHRINKDB DBCC SHRINKFILE
压缩数据库
dbcc shrinkdatabase(dbname)转移数据库给新用户以已存在用户权限 exec sp_change_users_login'update_one','newname','oldname' go
检查备份集
RESTORE VERIFYONLY from disk='E:\dvbbs.bak'
修复数据库
Alter DATABASE [dvbbs] SET SINGLE_USER GO DBCC CHECKDB('dvbbs',repair_allow_data_loss) WITH TABLOCK GO Alter DATABASE [dvbbs] SET MULTI_USER GO
日志清除
SET NOCOUNT ON DECLARE@LogicalFileName sysname,@MaxMinutes INT,@NewSize INT USE tablename--要操作的数据库名 Select@LogicalFileName='tablename_log',--日志文件名@MaxMinutes= 10,-- Limit on time allowed to wrap log.@NewSize= 1--你想设定的日志文件的大小(M)-- Setup/ initialize DECLARE@OriginalSize int Select@OriginalSize= size FROM sysfiles Where name=@LogicalFileName Select'Original Size of'+ db_name()+' LOG is'+ CONVERT(VARCHAR(30),@OriginalSize)+' 8K pages or'+ CONVERT(VARCHAR(30),(@OriginalSize*8/1024))+'MB' FROM sysfiles Where name=@LogicalFileName Create TABLE DummyTrans(DummyColumn char(8000) not null) DECLARE@Counter INT,@StartTime DATETIME,@TruncLog VARCHAR(255) Select@StartTime= GETDATE(),@TruncLog='BACKUP LOG'+ db_name()+' WITH TRUNCATE_ONLY' DBCC SHRINKFILE(@LogicalFileName,@NewSize) EXEC(@TruncLog)-- Wrap the log if necessary. WHILE@MaxMinutes> DATEDIFF(mi,@StartTime, GETDATE())-- time has not expired AND@OriginalSize=(Select size FROM sysfiles Where name=@LogicalFileName) AND(@OriginalSize* 8/1024)>@NewSize BEGIN-- Outer loop. Select@Counter= 0 WHILE((@Counter<@OriginalSize/ 16) AND(@Counter< 50000)) BEGIN-- update Insert DummyTrans VALUES('Fill Log') Delete DummyTrans Select@Counter=@Counter+ 1 END EXEC(@TruncLog) END Select'Final Size of'+ db_name()+' LOG is'+ CONVERT(VARCHAR(30),size)+' 8K pages or'+ CONVERT(VARCHAR(30),(size*8/1024))+'MB' FROM sysfiles Where name=@LogicalFileName Drop TABLE DummyTrans SET NOCOUNT OFF
更改某个表
exec sp_changeobjectowner'tablename','dbo'
存储更改全部表
Create PROCEDURE dbo.User_ChangeObjectOwnerBatch@OldOwner as NVARCHAR(128),@NewOwner as NVARCHAR(128) AS DECLARE@Name as NVARCHAR(128) DECLARE@Owner as NVARCHAR(128) DECLARE@OwnerName as NVARCHAR(128) DECLARE curObject CURSOR FOR select'Name'= name,'Owner'= user_name(uid) from sysobjects where user_name(uid)=@OldOwner order by name OPEN curObject FETCH NEXT FROM curObject INTO@Name,@Owner WHILE(@@FETCH_STATUS=0) BEGIN if@Owner=@OldOwner begin set@OwnerName=@OldOwner+'.'+ rtrim(@Name) exec sp_changeobjectowner@OwnerName,@NewOwner end-- select@name,@NewOwner,@OldOwner FETCH NEXT FROM curObject INTO@Name,@Owner END close curObject deallocate curObject GO
SQL SERVER中直接循环写入数据
declare@i int set@i=1 while@i<30 begin insert into test(userid) values(@i) set@i=@i+1 end
怎样学习sql
SQL学习路线
1、下载安装MySQL,或者安装软件phpstudy(这个软件自带了mysql数据库,而且安装启动方便)。
2、我这里用的是phpstudy,打开phpstudy后,点击下图中的启动,点击后数据库服务就会启动了
3、下载安装Navicat软件
这个软件可以轻松连接数据库,我们可以在这个软件中练习学习SQL语法
4、使用Navicat建立数据库连接
点击文件——新建连接,连接名随便填写,比如写“本地”。主机名、端口都不需要修改,用户名和密码都是root(因为我们安装的phpstudy里的mysql默认用户名密码就是root),点击连接测试显示为成功后点确定保存。
以后再次访问时,双击即可。
5、下载习题进行学习,内含习题需要用到的数据表。
6、导入第5步中下载的数据表。(后台回复关键词“SQL”获得)
右击第4步中的“本地”,新建一个数据库test1,双击打开新建的数据库(打开后颜色是绿色)。
拖拽刚才下载的数据表文件(sqltest1.sql)到test1上面。
这时会出现上述弹窗,点击开始,等待导入完成后,点击关闭
在左侧空白处右击,选择“刷新”,即可看到刚才导入的数据表了。
7、打开sql语法编辑器
如下图点击查询——新建查询,在空白处输入sql语法,点击运行,如果输入错误会有报错,输入正确则会返回查询内容。
8、边做边学
打开第一部分习题,边做边学,通过查询w3c的sql语法手册完成
9、巩固练习
尝试不看sql语法手册,独立完成第二部分习题。
以上是sql的学习路径。
sql数据分析需要学什么
作为数据分析师,你首先需要从正在查询的数据库中读取数据。我们一般会采用这种方法:
了解SELECT语句的工作方式。这其中包括研究逻辑查询处理的工作方式。逻辑查询处理描述了数据库引擎执行SELECT语句的子句的顺序。了解它会引导你编写更好,更准确的查询。
研究联接的工作方式
内部联接是最有效的。左,右和完全外部联接的效率较低,但有时必须使用它们。内部联接可以导致行被过滤掉,外部联接不能导致过滤。研究加入,因此你知道何时使用每种类型。只有最简单的数据库查询才不涉及联接。
了解如何使用GROUP BY子句进行聚合
了解窗口函数/有序分析函数。这些是在SQL中进行分析的缩影。最初很难将你的头缠绕在它们周围,但是这是值得的。一旦了解了它们,便会一直使用它们。
了解数据库规范化。如果你了解规范化,你将了解为什么架构师以这种方式构造数据库的理论。这有助于编写查询并确定要联接的表。
了解实体关系图(ERD)的工作方式。大多数ERD是使用鱼尾纹符号构建的。确保知道基数和可选性约束是如何工作的,这将帮助你解密连接表时要使用的连接类型。
一旦掌握了这些知识,就应该扩展到学习SQL的DML和DDL子类别。DML代表数据操作语言,SELECT语句是该语言的一部分。DDL代表数据定义语言,这是数据库架构师用来创建表的语言。
本文禁止转载或摘编
本文为我原创
大数据
数据分析
数据分析师
1
收藏
分享
推荐文章
35岁转行数据分析师可以吗?
学习· 56阅读
Excel之PowerQuery提取单元格指定文字
学习· 175阅读
[简述]答题验证系统部署说明
学习· 865阅读
关于本次sql学习和怎样学习sql的问题分享到这里就结束了,如果解决了您的问题,我们非常高兴。