下面的两个查询中,哪个对 postgresql 来说最有效?并且在可读性等方面具有更好的风格。
区别在于语句的位置doctor.type != 'surgeon'
在 WHERE 子句中:
SELECT practice.name, doctor.name
FROM doctor
JOIN practice ON (doctor_code = code)
WHERE doctor.name LIKE '%son'
AND (doctor.type != 'surgeon');
Run Code Online (Sandbox Code Playgroud)
或者在 JOIN 子句中:
SELECT practice.name, doctor.name
FROM doctor
JOIN practice ON (doctor_code = code AND doctor.type != 'surgeon')
WHERE doctor.name LIKE '%son';
Run Code Online (Sandbox Code Playgroud) 我已经读到 Microsoft SQL Server 已弃用text数据类型而支持varchar(max).
PostGreSQL 已经允许varchar(没有长度)作为text.
问题是,ANSI SQL 标准对弃用text和最佳替代方案有何看法?另外,MySQL/MariaDB 是否也遵循这一点?
谢谢
这是指这个问题:Duplicate records returned from table with no duplicates
“读提交”隔离级别假定一个事务可以以不同的方式读取同一条记录,但并不明确暗示记录可以重复。我同意同一事务中的两个语句可以返回不同的数据集,但返回带有重复记录的相同数据集听起来很疯狂。
据我所知,只有 MS SQL Server 有这种行为。
如果它符合ANSI SQL 标准定义的“Read Committed”隔离级别,请证明或反驳。
当我做这样的查询时,做笛卡尔积(交叉连接)背后的想法是什么 -
SELECT * FROM agents, orders
Run Code Online (Sandbox Code Playgroud)
我认为它们会连接(如pandas)。添加表格而不是乘以表格感觉更自然。
只是好奇,并没有在互联网上找到默认笛卡尔积背后的基本原理。我假设FROM table1, table2根据 SQL 的语法对于交叉连接可能更正确,但为什么呢?
我们正在从 Oracle 12c 执行大量 ETL 负载。Oracle 优化器时不时地决定为之前运行良好的 SQL 语句创建一个新的执行计划。通常这会导致 10 倍的性能下降。当我询问客户 DBA 和 Oracle 顾问(客户是金牌合作伙伴)时,他们通常会要求我们将 ANSI 连接转换为传统的 Oracle 连接。通常这有帮助。我的问题是,Oracle 是否承认对 ANSI 连接的支持不佳?Oracle 是否建议使用传统连接?(我读过 Oracle 的书,说明正好相反。)
SQL 2011 规范支持CORRESPONDING子句,
功能 F301,“
CORRESPONDING在查询表达式中”:
这是什么功能?它是如何使用的?并且,它是否得到任何行业 RDBM 的支持?
我需要知道是否有数据库支持双引号作为其表名的一部分。我对 JDBC 兼容的数据库特别感兴趣。如果他们这样做了,我能知道怎么做吗?
关于 SQL 的一般问题:
如果两个用户执行同一个sql语句,有没有可能user1和user2得到不同的结果?
想象一下 user1 比 user2 拥有更多的权限。
换句话说:user1 有可能收到 100 行,而 user2 只收到 80 行吗?
我的问题是关于 SQL 标准。
但是可以在评论中随意谈论特定数据库系统的实现。
查询:
select year,sum(mark),sum(maxmark)
from table1
group by parameterno
Run Code Online (Sandbox Code Playgroud)
产生错误消息:
列“table1.year”在选择列表中无效,因为它不包含在聚合函数或 GROUP BY 子句中。
sql-standard ×10
join ×2
postgresql ×2
sql-server ×2
exception ×1
group-by ×1
jdbc ×1
mysql ×1
operator ×1
oracle-12c ×1
permissions ×1
select ×1
union ×1