Questions tagged «sql»

结构化查询语言(SQL)是用于查询数据库的语言。问题应包括代码示例,表结构,示例数据以及正在使用的DBMS实现的标签(例如MySQL,PostgreSQL,Oracle,MS SQL Server,IBM DB2等)。如果您的问题仅涉及特定的DBMS(使用特定的扩展名/功能),请改用该DBMS的标签。使用SQL标记的问题的答案应使用ISO / IEC标准SQL。

2
SQL Output子句是否可能返回未插入的列?
我已经对数据库进行了一些修改,并且需要将旧数据迁移到新表中。为此,我需要填充一个表(ReportOptions),该表从原始表(Practice)中获取数据,并填充第二个中间表(PracticeReportOption)。 ReportOption (ReportOptionId int PK, field1, field2...) Practice (PracticeId int PK, field1, field2...) PracticeReportOption (PracticeReportOptionId int PK, PracticeId int FK, ReportOptionId int FK, field1, field2...) 我进行了查询,以获取从练习到ReportOptions所需的所有数据,但是我无法填写中间表 --Auxiliary tables DECLARE @ReportOption TABLE (PracticeId int /*This field is not on the actual ReportOption table*/, field1, field2...) DECLARE @PracticeReportOption TABLE (PracticeId int, ReportOptionId …
123 sql  sql-server 


6
SQL分组依据和排序依据
我有一张标签表,想从列表中获得计数最高的标签。 样本数据如下所示 id (1) tag ('night') id (2) tag ('awesome') id (3) tag ('night') 使用 SELECT COUNT(*), `Tag` from `images-tags` GROUP BY `Tag` 让我得到正在寻找的完美数据。但是,我希望对它进行组织,以使最高的标签数排在首位,并限制它仅向我发送前20个左右。 我试过了 SELECT COUNT(id), `Tag` from `images-tags` GROUP BY `Tag` ORDER BY COUNT(id) DESC LIMIT 20 而且我不断收到“组功能的无效使用-ErrNr 1111” 我究竟做错了什么? 我正在使用MySQL 4.1.25-Debian


10
数据库和函数式编程是否不一致?
我已经从事Web开发已有一段时间了,最​​近开始学习一些函数式编程。像其他人一样,我在将许多这些概念应用于我的专业工作时遇到了很大的麻烦。对我来说,主要原因是我发现FP保持无状态的目标之间存在矛盾,这与我所做的大多数Web开发工作都与数据高度依赖的数据库紧密相关这一事实很不相符。 使我成为OOP方面更具生产力的开发人员的一件事是发现了对象关系映射器,例如用于.Net的MyGeneration d00dads,用于perl的Class :: DBI,用于ruby的ActiveRecord等。这使我远离了从整天编写插入和选择语句开始,并专注于轻松地将数据作为对象使用。当然,当需要使用SQL查询时,我仍然可以编写它们,但是在后台可以很好地抽象它。 现在,转向函数式编程,对于许多FP Web框架(如Links)来说,似乎需要编写许多样板sql代码,如本例所示。Weblocks似乎更好一些,但是它似乎使用了一种OOP模型来处理数据,并且仍然需要为数据库中的每个表手动编写代码,如本例所示。我想您使用了一些代码生成来编写这些映射函数,但是看起来绝对像是非lisp。 (请注意,我没有非常仔细地查看Weblocks或Links,可能只是误解了它们的用法)。 所以问题是,对于Web应用程序的数据库访问部分(我认为这是相当大的),或其他需要与sql数据库进行接口的开发,我们似乎被迫遵循以下路径之一: 不要使用函数式编程 以一种烦人,轻松的方式访问数据,其中涉及手动编写许多SQL或类似SQL的代码ala链接 将我们的函数式语言强制为伪OOP范式,从而消除了真正的函数式编程的某些优雅和稳定性。 显然,这些选择都不是理想的。是否找到了规避这些问题的方法?这里真的有一个问题吗? 注意:我个人最熟悉FP方面的LISP,因此,如果您要提供任何示例并了解多种FP语言,则Lisp可能是首选语言 PS:对于特定于Web开发其他方面的问题,请参见此问题。


17
您对存储过程的命名约定是什么?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 我已经看到了各种命名存储过程的规则。 某些人在存储过程名称前加上usp_前缀,另一些人在应用程序名称的缩写前加上前缀,而另一些人则在所有者名称前加上前缀。除非您确实如此,否则不应在SQL Server中使用sp_。 有些人以动词开头proc名称(获取,添加,保存,删除)。其他人则强调实体名称。 在具有数百个存储过程的数据库上,当您认为已经存在一个存储过程时,很难滚动查找合适的存储过程。命名约定可以使存储程序的查找更加容易。 您是否使用命名约定?请描述一下,并说明为什么您偏爱其他选择。 答复摘要: 似乎每个人都提倡命名的一致性,对于每个人来说,使用相同的命名约定可能比使用特定的命名约定更为重要。 前缀:虽然很多人使用usp_或类似名称(但很少使用sp_),但其他许多人则使用数据库或应用程序名称。一个聪明的DBA使用gen,rpt和tsk来区分一般的CRUD程序和用于报告或任务的程序。 动词+名词似乎比名词+动词更受欢迎。有些人为动词使用SQL关键字(“选择”,“插入”,“更新”,“删除”),而其他人则使用诸如Get和Add之类的非SQL动词(或它们的缩写)。有些人在单数名词和复数名词之间进行区分,以指示是否正在检索一个或多个记录。 最后在适当的地方建议添加一个短语。GetCustomerById,GetCustomerBySaleDate。 有些人在名称段之间使用下划线,而有些人则避免使用下划线。app_ Get_Customer与appGetCustomer-我想这是可读性的问题。 可以将大量的sproc隔离到Oracle软件包或Management Studio(SQL Server)解决方案和项目或SQL Server架构中。 应避免使用难以理解的缩写。 为什么选择我做的答案:有很多好的答案。谢谢你们!如您所见,很难只选择一个。我选择的那个引起了我的共鸣。我遵循了他描述的相同路径-尝试使用动词+名词,然后无法找到所有适用于客户的存储过程。 能够找到一个现有的存储过程,或者确定一个存储过程是否存在,这一点非常重要。如果有人无意间创建了另一个名字的重复存储过程,可能会导致严重的问题。 由于我通常在具有数百个存储库的大型应用程序上工作,因此我偏爱最容易找到的命名方法。对于较小的应用程序,我可能会提倡动词+名词,因为它遵循方法名称的通用编码约定。 他还主张使用应用程序名称作为前缀,而不是使用不太有用的usp_。正如一些人指出的那样,有时数据库包含多个应用程序的存储库。因此,使用应用程序名称作为前缀有助于隔离存储过程,并有助于DBA和其他人确定该存储过程用于哪个应用程序。


1
PostgreSQL外键语法
我有2个表格,您将在下面的posgresql代码中看到。第一个表格的student有两列,一列为student_name,另一列为student_id,这是主键。在我称为测试的第二张表中,该表有4列,一列用于subject_id,一列用于subject_name,然后一列用于在该学科中具有最高分数的学生,该分数最高。我正在尝试使highestStudent_id引用我的students表中的student_id。这是我下面的代码,不确定语法是否正确: CREATE TABLE students ( student_id SERIAL PRIMARY KEY, player_name TEXT); CREATE TABLE tests ( subject_id SERIAL, subject_name, highestStudent_id SERIAL REFERENCES students); 语法highestStudent_id SERIAL REFERENCES students正确吗?因为我看过另一个像highestStudent_id REFERENCES students(student_id)) 请问在postgresql中创建外键的正确方法是什么?

10
创建PostgreSQL ROLE(用户)(如果不存在)
如何编写SQL脚本在PostgreSQL 9.1中创建ROLE,但是如果已经存在则不引发错误? 当前脚本仅具有: CREATE ROLE my_user LOGIN PASSWORD 'my_password'; 如果用户已经存在,则失败。我想要类似的东西: IF NOT EXISTS (SELECT * FROM pg_user WHERE username = 'my_user') BEGIN CREATE ROLE my_user LOGIN PASSWORD 'my_password'; END; ...但是那行不通- IF普通的SQL似乎不支持该功能。 我有一个批处理文件,该文件创建了PostgreSQL 9.1数据库,角色和其他一些东西。它调用psql.exe,并传入要运行的SQL脚本的名称。到目前为止,所有这些脚本都是纯SQL,如果可能的话,我想避免使用PL / pgSQL。

8
在现有表中添加一列,并在MS SQL Server上对其进行唯一编号
我想在现有的旧数据库中添加一列,并编写一个过程,通过该过程可以为每个记录分配不同的值。例如添加列并为其自动生成数据。 就像,如果我添加一个名为“ ID”(数字)的新列,那么我想为每个记录初始化一个唯一值。因此,我的ID 列将包含来自say的记录1 to 1000。 我怎么做?
121 sql  sql-server 

6
SQL中where子句的顺序重要吗?
假设我有一个名为PEOPLE3列的表ID, LastName, FirstName,这些列都没有索引。 LastName比较独特,FirstName却不那么独特。 如果我进行2次搜索: select * from PEOPLE where FirstName="F" and LastName="L" select * from PEOPLE where LastName="L" and FirstName="F" 我相信第二个更快,因为LastName在where子句中,更独特的标准()排在第一位,并且记录将被更有效地消除。我认为优化器不够聪明,无法优化第一个sql。 我的理解正确吗?

27
MySQL插入位置查询
此查询有什么问题: INSERT INTO Users( weight, desiredWeight ) VALUES ( 160, 145 ) WHERE id = 1; 它不带WHERE子句就可以工作。我似乎忘记了我的SQL。
121 sql  mysql 



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.