‘壹’ sql 怎么取不重复的数据的所有数据
SQL数据重复分几种情况,一种是原数据重复,第二种是粒度重复,第三种是分布重复。
原数据重复的情况,你直接可以distinct掉,例如,学生表当中有两个重复的学号,你想取出不重复的,直接可以写:select
distinct
学号
from
学生表
第二种是查询粒度重复,比如你有一张表是存储区域的,分别为省、市、县三列。而你需要的是只查找不同的省市,则也可以使用distinct:select
distinct
省,市
from
区域
第三种则是分布重复,比如在join
的时候,左右两个表格存在一对多的关系,造成的重复,或者在聚合之后出现了维度重复,则这种相对来说比较麻烦,你需要在子查询中统计或查找出唯一值,然后再去关联,或者是按照一定的数据需求的取数规则,在查询结果后再进行聚合,取到唯一值。
不过不管怎么样,都是要看实际需求是什么样子的。大多可以用子查询和关联联合解决。
‘贰’ SQL实战新手入门:获取数据-SELECT语句(3)
获取数据 SELECT语句( )
其次 更为重要的是 可以在WHERE子句中使用列名来引用列 WHERE子句的功能是作为一个筛选器 允许用户选择与特定条件相匹配的记录 例如Alex Kriegel编写的所有图书或者那些由Wiley出版社出版的图书 WHERE子句的语法非常直观 看起来就像是英语语句一样
SELECT * FROM myLibrary WHERE publisher = Wiley ;
该查询的结果仅仅列出了PUBLISHER列中存储的值等于Wiley的那些记录 注意 WHERE子句中的Wiley值应该用单引号括起来 以指示数据库要进行比较的是字符数据类型
数据库中可能包含了数百万条记录 WHERE子句可以缩小搜索的范围 筛选出一条特定的记录或者一个与指定筛选标准相匹配的记录的集合 这正是SQL语言作为一种基于集合的声明性语言的强大之处 使用一个类似于英语的简单语句就可以搜索记录并返回一个满足匹配条件的记录的子集 而无须关心数据是如何存储的 甚至无须知道数据存储在什么地方 当在Microsoft Access Oracle PostgreSQL MySQL SQL Server或IBM DB 中运行上面的SELECT语句时 都将返回完全相同的结果
在WHERE子句中 另外一个重要的组成部分就是使用操作符 前面的查询使用了一个等于操作符 用于筛选出那些出版社名称为Wiley的记录 采用类似的办法 使用不等于操作符很容易查询出那些不是Wiley出版社出版的图书
SELECT * FROM myLibrary WHERE publisher <> Wiley ;
使用AND和OR逻辑操作符可以将多个操作符连接在一起 定义一个更为严格的筛选标准 例如 要查找Wiley出版社出版的由Alex Kriegel编写的图书 可以使用下面的查询
SELECT * FROM myLibrary
WHERE publisher = Wiley AND author= Alex Kriegel ;
该查询仅仅返回一条同时满足这两个条件的记录 如果使用OR逻辑操作符来连接这两个条件 则可以返回满足其中任意一个条件的所有记录 而不一定要求两个条件都同时满足 但在布尔逻辑中使用逻辑操作符来定义搜索条件时 应当倍加小心 除非完全理解了逻辑操作符的规则 否则查询结果可能会大大出乎意料
第 章将进一步介绍操作符 以及其在不同数据库厂商之间的语法差异和优先级规则
试一试使用SELECT语句
在下面的练习中 将采用Microsoft SQL Server 数据库环境练习一下SELECT语句的使用 请重复本章第一个 试一试 练习中步骤( )到步骤( )的操作 以便输入并执行SQL命令
( ) 输入下面的SQL语句 将数据插入到MYLIBRARY表中
INSERT INTO myLibrary (title author book_language publisher pages
author publish_date i *** n)VALUES ( SQL Bible Alex Kriegel English
Wiley Boris M Trukhnov April )
INSERT INTO myLibrary(title author book_language publisher pages publish_date
i *** n) VALUES ( Microsoft SQL Server Weekend Crash Course Alex Kriegel
English Wiley October )
INSERT INTO myLibrary(title author book_language publisher pages publish_date
i *** n) VALUES ( Mindswap Robert Sheckley English Orb Books May
)
INSERT INTO myLibrary(title author book_language publisher pages publish_date
i *** n) VALUES ( Jonathan Livingston Seagull Richard Bach English MacMillan
)
INSERT INTO myLibrary(title author book_language publisher pages publish_date
i *** n) VALUES ( A Short History of Nearly Everything Bill Bryson
English Broadway October )
( ) 单击位于上方工具栏中的Execute按钮 如之前的图 所示
( ) 在下方窗格的Messages选项卡中 可以看到 条确认信息 ( row(s) affected)
( ) 下面的查询语句将从MYLIBRARY表中选取所有的行和列(由于版面空间的限制 这里省略了这些例子中实际查询结果的显示)
SELECT * FROM myLibrary;
( row(s) affected)
( ) 为了缩小搜索的范围 添加一个WHERE子句
SELECT * FROM myLibrary
WHERE publisher = Wiley ;
( row(s) affected)
返回目录 SQL实战新手入门
编辑推荐
Oracle索引技术
高性能MySQL
lishixin/Article/program/SQL/201311/16482
‘叁’ 哪个sql语句用于从数据库中提取数据
用sql语句,从数据库提取结果属于查询,使用select语句。select语句属于DQL(Data Query Language)。最基本的就是:select [列名1,列名2……] from [表名] where [条件]。
‘肆’ sql取当前时间前24小时之内的数据怎么取
sql取当前时间前24小时之内的数据的方法如下:
1、如果是ACCESS的话:
select * from 表名 where DateDiff('h',时间字段名,now())<=24
2、如果是sql server的话:
select * from 表名 where DateDiff(hh,时间字段名,getDate())<=24
(4)sql取数据扩展阅读:
sql取每天固定时间的数据的方法:
select * from 表 where 日期字段>='开始日期' and 日期字段<='截止日期'
and convert(char(8),日期字段,108)>='开始时间' and convert(char(8),日期字段,108)<='截止时间'
例如:
select * from tb1 where dDate>='2010-11-05' and dDate<='2010-11-15'
and convert(char(8),dDate,108)>='22:30:00' and convert(char(8),dDate,108)<='23:00:00'
‘伍’ SQL数据库如何提取数据
程序有问题呀,你的查询返回了login表中的所有数据,在判断用户名是否存在表中时,只读取了第一条,只要第一条记录的用户名不是你输入的那个用户名,a==username就不会成立。要用一个循环依次读取所有记录来判断才行。
建议在查询时以用户名为条件查询,这样只在查询后检查dr是否返回数据就可以判断用户名存不存在了。
string
username
=
textbox1.text.tostring();
string
password
=
textbox2.text.tostring();
string
qq
=
"select
*
from
login
where
username='"
+
username
+
"'";
sqlconnection
conn
=
new
sqlconnection(connstring);
conn.open();
sqlcommand
cmd
=
new
sqlcommand(qq,
conn);
sqldatareader
dr
=
cmd.executereader();
if
(dr.hasrows)
//判断dr是否返回了一行或多行数据
{
messagebox.show("用户名已存在,请重新输入!");
}
else
{
。。。。。。
}
‘陆’ SQL 如何取出数据库中一列的所有值.....
1、首先需要输入名称和密码登陆服务器。
‘柒’ SQL数据库如何提取指定的金额数字
SUBSTRING ( expression , start , length )
select substring('123456.78',1,1) 其中 第一个"1"是第一位开始,第二个"1"是指取一位数。
所以十万:select substring('123456.78',1,1) =1
取千:select substring('123456.78',3,1) =3
取角:select substring('123456.78',8,1) =7
----仅供参考
‘捌’ SQL实战新手入门:获取数据-SELECT语句(1)
获取数据 SELECT语句( )
现在MYLIBRARY表中已经有了数据 可以对该表执行查询 以精确地查找所具有的图书 SELECT语句用于从表中获取数据 要使用SELECT语句获取数据 只需要告诉它表名和列名
SELECT all_my_books FROM myLibrary;
尽管该查询可以产生一个图书信息的列表 但它还不是特别有用 该图书信息是一大堆的数据 将其存储在一个关系型数据库中的唯一好处就是可以轻而易举地重新获取或打印这些信息 如果要搜索数据呢?要查找是否有某一本特定的图书 必须获取所有的记录 然后人工地逐一遍历每一条记录!这并不是我们期望从一个复杂的RDBMS软件获得的结果
需要采用某种办法来标识存储在表中的记录的特殊关键词 例如图书名称或ISBN号 对于该问题 一个标准的程序设计方式的答案就是对记录进行解析 将记录切分为多个片段 并在一个循环中遍历查找特定的目标词汇 对于表中的每一条记录重复执行这一过程 如果没有特定于厂商的过程化扩展 SQL无法执行任何类似的操作 这种方式违背了SQL语言是一种声明性语言的本质 并要求深刻地理解数据结构 下面让我们再看一看输入到MYLIBRARY表中的第一条记录
SQL Bible by Alex Kriegel Boris M Trukhnov Paperback: pages
Publisher: Wiley; edition (April ) Language: English
ISBN :
如何才能将记录切分为不同的信息片段呢?每一个片段之间的标记是什么呢?如何区分图书的名称和作者呢?如果使用空格符作为分隔符 那么SQL和Bible将被切分为不同的片段 但在逻辑上SQL和Bible属于同一个信息片段 如何才能知道by是一个介词 而不是作者姓名中的一部分?解决的办法来自SQL结构化的本性 毕竟SQL是一种结构化的查询语言 要解决这一问题 需要更多的列来存储不同片段的信息 将一个笨重的字符串拆分为多个语义上有着密切联系的数据片段就可以独立地标识每一个数据片段 因为每一个片段都成为一个单独的列 回到CREATE TABLE语句(首先删除现有的表)
DROP TABLE myLibrary;
根据上面的讨论创建一个新表
CREATE TABLE myLibrary
(
title VARCHAR( )
author VARCHAR( )
author VARCHAR( )
publisher VARCHAR( )
pages INTEGER
publish_date VARCHAR( )
i *** n VARCHAR( )
book_language VARCHAR( )
)
在新表的结构中 将原来的单个列拆分为 个列 另外还可以添加第 个列 将作者的名和姓拆分到两个单独的列中(这就是将在第 章中讨论的数据建模过程) 就目前而言 除了将PAGES列的数据类型设置为INTEGER类型以表示图书包含多少页之外 对于其他所有的列都使用了相同的数据类型 并缩短了每一个列中所能包含的字符数量 本章后面将进一步解释将PAGES列设置为INTEGER类型的原因 读者或许还会考虑到修改PUBLISH_DATE列的数据类型 通常情况下 日期数据的行为与字符数据不同 DBMS提供了专门用于日期和时间的数据类型
现在 无须将所有的数据都保存在同一个桶中 对于各个列的数据类型可以有更多的选择 可以将不同的列定义为不同的数据类型 当插入或更新各个列中的数据(本章后面将对此进行介绍)时 建议不要将数据类型搞混
本章后面还将重新审视数据类型 第 章也将详细地介绍数据类型
读者可能已经注意到 在新的MYLIBRARY表中有两个作者列 这是为了适应一本图书有两个作者的情形 这也提出了另外一个问题 当一本图书只有一个作者或者一本图书有 个作者时 该如何处理呢?该问题将在第 章和第 章的数据建模小节中进行深入的探讨 这里 读者只需要注意对于未使用的列将自动使用默认值进行填充 如果读者发现经常需要在表中添加新的列 那么最好花时间阅读一下关于数据库规范化方面的内容(请参见第 章)
接下来将向新表中插入数据 这一步骤与之前介绍的插入操作完全相同 唯一的差别在于VALUES列表变得更长 因为原来只包含一个列 而现在包含了 个列 在VALUES列表中 除了PAGES列的值之外 所提供的所有其他数据都必须用单引号括起来 引号表明了这些数据是字符数据 没有引号则表示数值数据
INSERT INTO myLibrary VALUES (
SQL Bible
Alex Kriegel
Boris M Trukhnov
Wiley
April
English )
返回目录 SQL实战新手入门
编辑推荐
Oracle索引技术
高性能MySQL
lishixin/Article/program/SQL/201311/16484