sql相关
1. sql相关查询
首先了解SQL Select语句的功能和语法:
SELECT 语句用于从表中选取数据。
结果被存储在一个结果表中(称为结果集)。
语法:
SELECT 列名称 FROM 表名称 或者 SELECT * FROM 表名称
上面是一个SQL的嵌套查询,就像抽丝剥茧一样,我们首先从最里面的查询入手。
1、SELECT *FROM SC WHERE Sno=Student.Sno AND Cno=Course.Cno --查询选修表中选课的所有学生信息
2、SELECT * FROM Course --查询课程表中课程的所有信息
3、SELECT Sname FROM Student --查询学生表中学生姓名
在上面三个查询中,第3个查询是主查询,也是这个嵌套查询的关键,查询满足条件的学生姓名。
结合2,3两个查询和他门中间的连接条件,我们不难发现:
4、SELECT * FROM Course WHERE NOT EXISTS (SELECT * FROM SC WHERE Sno=Student.Sno AND Cno=Course.Cno)); --查询不在选修表中的课程信息即没有学生选修的课程信息
再结合第4,1查询条件和连接条件,得出最终所要查询的结果:
5、SELECT Sname FROM Student WHERE NOT EXISTS (SELECT * FROM Course WHERE NOT EXISTS (SELECT * FROM SC WHERE Sno=Student.Sno AND Cno=Course.Cno)); --查询所有没有未选择课程的学生。
当然,听起来比较绕,其实就是查询选择了所有课程的学员名称。希望你能理解!
2. SQL语句相关的非常难的问题,请各位帮帮忙
这个问题不太好解决,大致可以循两个方向去解决:
1)需要数据库支持。看看数据库有没有储存运行SQL查询记录的机制,或者自建机制将数据库每次运行查询过的源表名存储起来(操作查询比较容易,可以使用触发器,选择查询不好办)。如果有这类记录的话,那么查询这些记录就可以得到查询过哪些源表?;
2)用编程的方法,对已经运行的SQL语句进行分析,根据SQL语言的编写规律,编写相应的算法,从中检索出这些字符串中查询过的源表名,具体的算法代码视不同编程语言和数据库SQL方言而有所不同。大致上是找关键字 “From” 或“UPDATE”或“DELETE”后面到关键字“WHERE”或“GROUP'或“ORDER”或结尾之间,首个无空格的字符串、或逗号后面无空格的字符串、或[]方括号里的字符串等
例如:SQL查询字符串“select a.*, b.name,c.Qty from table1 a, [table 2] b,(select item,Sum(*) as Qty from table3 group by item) c where a.id=b.id and a.item =c.item"
用算法取出里面的 table1、table 2、table3,当然取出来的表名还要排除其中的虚拟表(如果存在的话,例如查询、视图、存储过程、临时表等) 。
只要算法合适取出来源表名完全是能做的到得,只不过设计这个算法绝对不是一件轻松事,需要对SQL查询有很深入细致的了解!
哦!对了,如果数据库的所有源表名都带一个可唯一标识的“字符串”前缀或者后缀,那么取源表名算法可能会大大简化。
3. 数据库,sql、mysql,的相关软件有哪些管理工具盒开发工具
数据库,从某种意上讲,就像一个盘符下的根目录,如:C盘代表mysql,那么C:/A目录就代表名为A的数据库,所以它就像一个较大的集合;当然sqlserver数据库不是这样的表示,但其核心思路也相同,只是形式所表现不同罢了,ORACLE就表现形式来讲就更复杂一点;ACCESS数据库就是以一个文件形式存在的桌面数据库。
sql,其实是操作各种数据库的命令,也可以叫做语法集合什么,用它来控制和操作数据库的表,记录,字段和数据库有关的一切信息,只要你愿意,你就可以用SQL它控制数据库的一切。
mysql,目前比较流行于WEB界的小型数据库,与php完美结合,是互联网开的完美组合,目前互联网上站点使用最多的数据库就是它了,所以它的人气相当高,操作也比较容易,灵巧,部属和安装都相对简单,是一个很好数据库;
相关软件,有ACCESS+asp,sqlserver+asp.net,jsp+oracle/mysql/mssql,黄金搭档就要属PHP+MYSQL,这种类型目前互联网上的资源最多,也相对全面点。具体到数据库的相关软件有:ACCESS,SQLserver,Mysql,Oracle,每种数据库都有不同层次或领域的应用,则其选用。
管理工具盒,其实是指某个软件内部自带的工具,如网站开发工具DW就自带了各种数据库的工具盒,但都不太完美,正所谓什么都会,就肯定什么都不太精通只是免强满足一定的需求。
开发工具,这个就比较多了,如access就自带了数据库管理开发工具,mysql也有phpMyAdmin,Navicat Premium,SQLyog等工具,sqlserver是微软家,自带开发工具,oracle是一个高级的数据库软件,自带强大的全方位的管理开发工具,是非常全面的数据库,但由于部属较麻烦,所以一般来讲,大型项目才部属。这里值得推荐的管理开发工具要属Navicat Premium,它几乎所有数据库,操作也简单明了,所以推荐楼主使用。
以上一些希望帮得到楼主,一切顺意,望采纳!
4. 学习数据库和 SQL 相关的知识有哪些可以推荐的书籍
学习一下ACCESS或者是Foxpro就可以了。如果想深入学习,要先学习<<离散数学>>中的关系代数部分,再学习数据库原理与优化,再学习TranSQL-92标准,再学习SQLSERVER、MYSQL、ORACLE中的一种就可以了。还用要了解ODBC、OLEDB、ADO、RDO等数据访问接口方法。学习SQL语句可以用ACCESS做入门程序,因为ACCESS中的可视化查询非常好用,可以制作完查询后再翻译成SQL语句。
5. sql语句相关知识,求大神解答啊!
"delete from " + Request["tablename"].ToString().Trim() + " where pid=" + int.Parse(Request["delid"].ToString().Trim()) + ""
拼成SQL就是:
delete from 表名tablename where pid = delid值
就是删除掉表中pid的值是 页面获取的delid的值的 数据
6. SQL里,什么叫相关子查询
你这样写
1.
sc表中如果s#与c#是一对多or多对多的关系,可能会报错
2.
从你的语句来看,你现在查询的是已经选课的学生。因为你最后的查询条件是sc.c#
is
not
null
3.
为什么会是多条数据。原因大概是这样的。你这里写的语句,用了sql查询中一个很高级的概念。关联子查询。它的执行顺序是
a.从student表中查询一条数据m
b.将m放到sc表中根据where
s.s#=sc.s#寻找满足的数据n,然后再在n中根据sc.c#
is
not
null查找满足的数据k
c.将k的结果再与主查询中where
s#=相匹配
d.如果k的结果是〉1的,那么你的语句就会报错。就算k每次只返回一条数据,也有可能返回重复的数据(因为sc中s#与c#只要不是一对一,就有可能返回重复的数据)
修改代码如下
--如果一个学生有任何一门课没选课,就返回他的名字
select distinct a.sname from student as a
inner join sc as b on a.s#=b.s#
where b.c# is null
7. SQL查询相关
像你这个语句SQL会优化执行,不会再检索一次。
当然如果多次使用到检索的中间结果,最好是把中间结果存入临时表。
8. SQL 相关问题
select 号码,类型,时间
from (
select 号码,类型,时间,row_number() over (partition by 号码 order by 时间) rn
from table_name
where 时间 is not null
) a
where rn=1
9. SQL 搜索结果相关性排序问题
如果先按标题中同时出现"数据库"和"Sql"
>>
内容中同时出现"数据库"和"Sql"
>>
标题中出现"数据库"或"Sql"
>>内容中出现"数据库"或"Sql"
再按时间降序只能用添加辅助列的方法实现:
Select
Title,Content,case
when
Title
like
'%数据库%'
and
Title
like
'%Sql%'
then
1
when
Content
like
'%数据库%'
and
Content
like
'%Sql%'
then
2
when
Title
like
'%数据库%'
or
Title
like
'%Sql%'
then
3
when
Content
like
'%数据库%'
or
Content
like
'%Sql%'
then
4
end
as
priority
from
Article
order
by
priority,tTime
desc
10. SQL语法相关
表连接的话应该指定连接条件,对于你的表结构,连接条件应该为
A.deptid=B.deptid
完整语句可以写作:
select A.workerid,A.workername,B.deptid,B.deptname
from worker as A,dept as B
where A.deptid=B.deptid and B.deptid='101' and A.workerid='1001'