草庐IT

07.DQL查询语句--条件查询

Liuzhl 2023-10-09 原文

条件查询

select 列1... from 表名 where 条件
  • 支持的运算符:= <=> != <> > < >= <=
    between...and in(...) is null not or and

比较运算符= <=> != <> > < >= <=

  1. 从emp表中查询出sal 大于等于 10000的员工的姓名和工资
SELECT ename, sal
FROM emp
WHERE sal >= 10000;
  1. 从emp表中查询出部门编号为20的员工的姓名和部门编号
SELECT ename, deptno
FROM emp
WHERE deptno = 20;
  1. 从emp表中查询出05年过后入职的员工的所有信息
SELECT *
FROM emp
WHERE hiredate >= '2005-01-01';
  1. 从emp表中查询出不是文员的员工的所有信息
SELECT *
FROM emp
WHERE job != '文员';

SELECT '赵' < '钱';  # 1 
  1. 从emp表中查询出comm为null的员工的所有信息
    普通的比较运算符和null比较,得到unknown
SELECT * 
FROM emp
WHERE comm = NULL;  # 1条数据都得不到

要和null值比较,请用 <=> 和 <>

SELECT * 
FROM emp
WHERE COMM <=> NULL;

逻辑运算符 &&(AND) ||(OR) !(NOT) XOR

&& 与:只有 1 && 1 结果才为1
|| 或:只有 0 || 0 结果才为0
! 非:表示取反,原来为1 现在为0,原来为0,现在为1
XOR 异或:有且仅有1个条件为真时,结果才为真

  1. 从emp表中查出工资大于10000的销售员
SELECT * 
FROM emp
WHERE sal > 10000 && job = '销售员';
  1. 从emp表中查询出经理和分析师
SELECT * 
FROM emp
WHERE job = '经理' || job = '分析师';

&& 的优先级比 || 高,就要先计算与,再计算或
所以下面这条语句没有筛选到 job = '经理'的工资情况
先执行 job = '分析师' && sal > 25000得到结果A
在计算 job = '经理' || A
SELECT * 
FROM emp
WHERE job = '经理' || job = '分析师' && sal > 25000;

SELECT * 
FROM emp
WHERE (job = '经理' || job = '分析师') && sal > 25000;

模糊查询

  • 当我们只知道部分信息的时候,可以使用模糊查询来查询数据
select 列1... from 表名 where 列名 like '模糊条件'
  • 其中模糊条件有2个符号
    • ‘%’ 代表0-N个字符
    • ‘_’ 代表一个字符
  • 例如我们的表中有一个刘备,再添加一个刘玄德
SELECT * FROM emp WHERE ename LIKE '刘_'
  • 上面语句能查到刘备,而查不到刘玄德
SELECT * FROM emp WHERE ename LIKE '刘__'
  • 上面语句能查到刘玄德而查不到刘备
SELECT * FROM emp WHERE ename LIKE '刘%'
  • 上面语句就既能查到刘备,也能查到刘玄德
  • '_'和'%'既能放在关键词后也能放在关键字前
SELECT * FROM emp WHERE ename LIKE '%德'
  1. 从emp表中查询出包括特殊字符的员工
    往emp表里添加一条数据,ename为刘备
    玄德
    INSERT INTO emp(ename) VALUES('刘备_玄德');
    escape 表示 后面的字符是转义字符,把他用到特殊字符前面,就表示特殊字符本身
SELECT * 
FROM emp
WHERE ename LIKE '%#_%' ESCAPE '#';
between and

between and 用于查询数值在一个连续区间内的数据
从emp表中查询出工资在15000到30000之间的员工信息

SELECT * 
FROM emp
WHERE sal >= 15000 && sal <= 30000;

SELECT *
FROM emp
WHERE sal BETWEEN 15000 AND 30000;

SELECT * 
FROM emp
WHERE hiredate BETWEEN '2002-01-01' AND '2007-12-31';

in

in 用于查询数字在一个不连续的集合中的数据
从emp表中,部门编号为10,20,30的员工信息

SELECT * 
FROM emp
WHERE deptno in(10,20,30);

如果使用between and, 万一有个部门编号为15,也要被查出来

查询出公司里面的文员、经理和销售员

SELECT * 
FROM emp
WHERE job in('文员', '经理', '销售员');

is null

is null 用来判断数据是否为空

SELECT * 
FROM emp
WHERE COMM IS NULL;

SELECT * 
FROM emp
WHERE comm <=> null;

有关07.DQL查询语句--条件查询的更多相关文章

  1. ruby - ECONNRESET (Whois::ConnectionError) - 尝试在 Ruby 中查询 Whois 时出错 - 2

    我正在用Ruby编写一个简单的程序来检查域列表是否被占用。基本上它循环遍历列表,并使用以下函数进行检查。require'rubygems'require'whois'defcheck_domain(domain)c=Whois::Client.newc.query("google.com").available?end程序不断出错(即使我在google.com中进行硬编码),并打印以下消息。鉴于该程序非常简单,我已经没有什么想法了-有什么建议吗?/Library/Ruby/Gems/1.8/gems/whois-2.0.2/lib/whois/server/adapters/base.

  2. ruby - 如何根据特征实现 FactoryGirl 的条件行为 - 2

    我有一个用户工厂。我希望默认情况下确认用户。但是鉴于unconfirmed特征,我不希望它们被确认。虽然我有一个基于实现细节而不是抽象的工作实现,但我想知道如何正确地做到这一点。factory:userdoafter(:create)do|user,evaluator|#unwantedimplementationdetailshereunlessFactoryGirl.factories[:user].defined_traits.map(&:name).include?(:unconfirmed)user.confirm!endendtrait:unconfirmeddoenden

  3. ruby-on-rails - 在 Rails 和 ActiveRecord 中查询时忽略某些字段 - 2

    我知道我可以指定某些字段来使用pluck查询数据库。ids=Item.where('due_at但是我想知道,是否有一种方法可以指定我想避免从数据库查询的某些字段。某种反拔?posts=Post.where(published:true).do_not_lookup(:enormous_field) 最佳答案 Model#attribute_names应该返回列/属性数组。您可以排除其中一些并传递给pluck或select方法。像这样:posts=Post.where(published:true).select(Post.attr

  4. ruby - 在 Ruby 中有条件地定义函数 - 2

    我有一些代码在几个不同的位置之一运行:作为具有调试输出的命令行工具,作为不接受任何输出的更大程序的一部分,以及在Rails环境中。有时我需要根据代码的位置对代码进行细微的更改,我意识到以下样式似乎可行:print"Testingnestedfunctionsdefined\n"CLI=trueifCLIdeftest_printprint"CommandLineVersion\n"endelsedeftest_printprint"ReleaseVersion\n"endendtest_print()这导致:TestingnestedfunctionsdefinedCommandLin

  5. ruby - 定义方法参数的条件 - 2

    我有一个只接受一个参数的方法:defmy_method(number)end如果使用number调用方法,我该如何引发错误??通常,我如何定义方法参数的条件?比如我想在调用的时候报错:my_method(1) 最佳答案 您可以添加guard在函数的开头,如果参数无效则引发异常。例如:defmy_method(number)failArgumentError,"Inputshouldbegreaterthanorequalto2"ifnumbereputse.messageend#=>Inputshouldbegreaterthano

  6. ruby - 如何在 Ruby 中向现有方法定义添加语句 - 2

    我注意到类定义,如果我打开classMyClass,并在不覆盖的情况下添加一些东西我仍然得到了之前定义的原始方法。添加的新语句扩充了现有语句。但是对于方法定义,我仍然想要与类定义相同的行为,但是当我打开defmy_method时似乎,def中的现有语句和end被覆盖了,我需要重写一遍。那么有什么方法可以使方法定义的行为与定义相同,类似于super,但不一定是子类? 最佳答案 我想您正在寻找alias_method:classAalias_method:old_func,:funcdeffuncold_func#similartoca

  7. sql - 查询忽略时间戳日期的时间范围 - 2

    我正在尝试查询我的Rails数据库(Postgres)中的购买表,我想查询时间范围。例如,我想知道在所有日期的下午2点到3点之间进行了多少次购买。此表中有一个created_at列,但我不知道如何在不搜索特定日期的情况下完成此操作。我试过:Purchases.where("created_atBETWEEN?and?",Time.now-1.hour,Time.now)但这最终只会搜索今天与那些时间的日期。 最佳答案 您需要使用PostgreSQL'sdate_part/extractfunction从created_at中提取小时

  8. ruby - ruby 乘法语句中星号中断语法前的空格 - 2

    在添加一些空格以使代码更具可读性时(与上面的代码对齐),我遇到了这个:classCdefx42endendm=C.new现在这将给出“错误数量的参数”:m.x*m.x这将给出“语法错误,意外的tSTAR,期待$end”:2/m.x*m.x这里的解析器到底发生了什么?我使用Ruby1.9.2和2.1.5进行了测试。 最佳答案 *用于运算符(42*42)和参数解包(myfun*[42,42])。当你这样做时:m.x*m.x2/m.x*m.xRuby将此解释为参数解包,而不是*运算符(即乘法)。如果您不熟悉它,参数解包(有时也称为“spl

  9. ruby-on-rails - 使用包含多个关联和单独的条件 - 2

    我的Gallery模型中有以下查询:media_items.includes(:photo,:video).rank(:position_in_gallery)我的图库模型有_许多媒体项,每个都有一个照片或视频关联。到目前为止,一切正常。它返回所有media_items包括它们的photo或video关联,由media_item的position_in_gallery属性排序。但是我现在需要将此查询返回的照片限制为仅具有is_processing属性的照片,即nil。是否可以进行相同的查询,但条件是返回的照片等同于:.where(photo:'photo.is_processingIS

  10. ruby-on-rails - 在 haml View 中重构条件 - 2

    除了可访问性标准不鼓励使用这一事实指向当前页面的链接,我应该怎么做重构以下View代码?#navigation%ul.tabbed-ifcurrent_page?(new_profile_path)%li{:class=>"current_page_item"}=link_tot("new_profile"),new_profile_path-else%li=link_tot("new_profile"),new_profile_path-ifcurrent_page?(profiles_path)%li{:class=>"current_page_item"}=link_tot("p

随机推荐