精华内容
下载资源
问答
  • 这里的where子句的内容是( )。 a.s.s# = sc.s# and c.c# = sc.c# and sage>=20 and cname=‘access’ b.s.s# = sc.s# and c.c# = sc.c# and sage in>=20 and cname in ‘access’ c.sage in>=...
  • Where子句

    千次阅读 2017-04-22 10:20:24
    Where子句 1、查询emp表中20号部门员工信息 select * from emp where deptno = 20;   2、查询姓名是SMITH员工,字符串使用'',内容大小写敏感 select * from emp where ename = 'SMITH';     3、查询...

    Where子句

    1、查询emp表中20号部门的员工信息

    select * from emp where deptno = 20;

     

    2、查询姓名是SMITH的员工,字符串使用'',内容大小写敏感

    select * from emp where ename = 'SMITH';

     

     

    3、查询19801217日入职的员工,注意oracle默认日期格式(DD-MON-RR表示2位的年份)

    select * from emp where hiredate = '17-12-80';

     

    4、查询工资大于1500的员工

    select * from emp where sal > 1500;

     

    5、查询工资不等于1500的员工【!=<>

    select * from emp where sal <> 1500;

     

    6、查询薪水在13001600之间的员工,包括13001600

    select * from emp where (sal>=1300) and (sal<=1600);

    select * from emp where sal between 1300 and 1600;

     

    7、查询薪水不在13001600之间的员工,不包括13001600

    select * from emp where sal NOT between 1300 and 1600;

     

    8、查询入职时间在"1981-2-20""1982-1-23"之间的员工

    select * from emp where hiredate between '20-2-81' and '23-1-82';

    注意:

    1)对于数值型,小数值在前,大数值在后

    2)对于日期型,年长值在前,年小值在后

     

    9、查询20号或30号部门的员工,例如:根据ID号,选中的员工,批量删除

    select * from emp where (deptno=20) or (deptno=30);

    select * from emp where deptno in (30,20);

     

    10、查询不是20号或30号部门的员工

    select * from emp where deptno NOT in (30,20);

     

    11、查询姓名以大写字母S开头的员工,使用%表示0个,1个或多个字符

    select * from emp where ename like 'S';

    等价

    select * from emp where ename = 'S';

    select * from emp where ename like 'S%';

     

    注意:

    凡是精确查询用=符号

    凡是不精确查询用like符号,我们通常叫模糊查询

     

    12、查询姓名以大写字母N结束的员工

    select * from emp where ename like '%N';

     

    13、查询姓名第一个字母是T,最后一个字母是R的员工

    select * from emp where ename like 'T%R';

     

    14、查询姓名是4个字符的员工,且第二个字符是I,使用_只能表示1个字符,不能表示0个或多个字符

    select * from emp where ename like '_I__';

     

    15、插入一条姓名为'T_IM'的员工,薪水1200

    insert into emp(empno,ename) values(1111,'T_IM');

     

    16、查询员工姓名中含有'_'的员工,使用\转义符,让其后的字符回归本来意思【like '%\_%' escape '\'

    select * from emp where ename like '%\_%' escape '\';

     

    17、插入一个姓名叫'的员工

    insert into emp(empno,ename) values(2222,'''');

     

    18、插入一个姓名叫''的员工

    insert into emp(empno,ename) values(2222,'''''');

     

    19、查询所有员工信息,使用%%%

    select * from emp;

    select * from emp where ename like '%';

    select * from emp where ename like '%_%';

     

    20、查询佣金为null的员工

    select * from emp where comm is null;

    注意:null不能参数=运算

          null能参数number/date/varchar2类型运算

     

    21、查询佣金为非null的员工

    select * from emp where comm is not null;

     

    22、查询无佣金且工资大于1500的员工

    select *

    from emp

    where (comm is null) and (sal>1500);

     

    23、查询工资是150030005000的员工

    select *

    from emp

    where sal in (4000,10000,1500,3,300,3000,5000);

     

    24、查询职位是"MANAGER"或职位不是"ANALYST"的员工(方式一,使用!=<>

    select *

    from emp

    where (job='MANAGER') or (job<>'ANALYST');

     

    25、查询职位是"MANAGER"或职位不是"ANALYST"的员工(方式二,使用not

    select *

    from emp

    where (job='MANAGER') or (not(job='ANALYST'));

     

     

    展开全文
  • 本篇文章给大家带来的内容是关于mysql中select和where子句优化的总结,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。数据库优化:1.可以在单个SQL语句,整个应用程序,单个数据库服务器或多个联网...

    本篇文章给大家带来的内容是关于mysql中select和where子句优化的总结,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

    数据库优化:

    1.可以在单个SQL语句,整个应用程序,单个数据库服务器或多个联网数据库服务器的级别进行优化

    2.数据库性能取决于数据库级别的几个因素,例如表,查询和配置设置

    3.在数据库级别进行优化,在硬件级别进行优化,平衡可移植性和性能

    4.合适的结构,合适的数据类型;执行频繁更新的应用程序大量表(少列);分析大量数据的应用程序少量表(多列);选择合适的存储引擎和索引;

    5.压缩适用于InnoDB表的各种工作负载,以及只读MyISAM表

    6.选择合适的锁定策略;InnoDB存储引擎可以处理大多数锁定问题

    7.配置的主要内存区域是InnoDB缓冲池和MyISAM密钥缓存。

    8.优化select语句,这方面技巧同样适用于其他带where的delete语句等,在where子句的列上设置索引;索引对于引用多个列如join和外键尤其重要

    select where子句优化:

    1.调整查询的结构,例如函数调用,为结果集中的每一行只调用一次,为表中的每一行只调用一次

    2.减少查询中的全表扫描数

    3.定期使用ANALYZE TABLE语句使表统计信息保持最新

    4.了解特定于每个表的存储引擎的调优技术,索引技术和配置参数

    5.优化InnoDB表的单查询事务

    6.通过阅读EXPLAIN计划并调整索引,WHERE子句,连接子句等来调查特定查询的内部详细信息

    7.调整MySQL用于缓存的内存区域的大小和属性。通过有效使用InnoDB缓冲池,MyISAM密钥缓存和MySQL查询缓存

    8.where条件,去掉不必要的括号,恒定折叠,恒定条件去除,减少不必要的逻辑

    9.被索引使用的常量表达式只计算一次

    10.count(*)直接从表信息中查询;当只有一张表时,not null表达式也是这样

    11.如果不使用GROUP BY或聚合函数(COUNT(),MIN()等),HAVING将与WHERE合并

    12.常量表,只有一行或空表;where子句作用在primary key或者unique索引上

    13.如果ORDER BY和GROUP BY子句中的所有列都来自同一个表,则在连接时首选该表

    14.如果order by子句和group by子句不一样,或来自不同的表,则会创建临时表

    15.如果使用SQL_SMALL_RESULT修饰符,MySQL将使用内存中的临时表

    16.MySQL甚至无需咨询数据文件即可只从索引中读取行

    17.在输出每一行之前,将跳过与HAVING子句不匹配的行

    以下表被用作常量表:SELECT * FROM t WHERE primary_key=1;

    SELECT * FROM t1,t2

    WHERE t1.primary_key=1 AND t2.primary_key=t1.id;

    以下查询运行速度非常快:SELECT COUNT(*) FROM tbl_name;

    SELECT MIN(key_part1),MAX(key_part1) FROM tbl_name;

    SELECT MAX(key_part2) FROM tbl_name

    WHERE key_part1=constant;

    SELECT ... FROM tbl_name

    ORDER BY key_part1,key_part2,... LIMIT 10;

    SELECT ... FROM tbl_name

    ORDER BY key_part1 DESC, key_part2 DESC, ... LIMIT 10;假设索引列是数值型,以下查询仅用到了索引树:SELECT key_part1,key_part2 FROM tbl_name WHERE key_part1=val;

    SELECT COUNT(*) FROM tbl_name

    WHERE key_part1=val1 AND key_part2=val2;

    SELECT key_part2 FROM tbl_name GROUP BY key_part1;

    以下查询使用索引按排序顺序取回数据,不需要单独排序SELECT ... FROM tbl_name

    ORDER BY key_part1,key_part2,... ;

    SELECT ... FROM tbl_name

    ORDER BY key_part1 DESC, key_part2 DESC, ... ;

    展开全文
  • sql语句之where子句

    2018-06-20 20:27:00
    现在登录都是把信息存在数据库,然后把输入与数据库内容进行匹配,一样就登录成功,否则不成功。验证码是为了防止暴力破解,因为计算机能够自动匹配密码,但是不能识别图片上字母,只有人能识别,所以匹配...

    现在的登录都是把信息存在数据库,然后把输入的与数据库内容进行匹配,一样就登录成功,否则不成功。验证码是为了防止暴力破解,因为计算机能够自动匹配密码,但是不能识别图片上的字母,只有人能识别,所以匹配的速度会减慢。还有的会记录登录IP,如果IP频繁变化就会进行提示。还有银行会限制输入次数。

    作用

    限制表中的数据返回  符合where后面的条件的数据就会被选中,不符合where条件的语句会被过滤掉

    两个极限条件

    /*这是永真条件*/   (数据库里可以有注释,这里是多行注释)
    where  1 = 1 ; (用一个等号判断相不相等,因为这里是不存在赋值的,没有“= =”)
    - -  这是永假条件(数据库里可以有注释,这里是单行注释,注释符和注释之间要有空格)
    where  1 = 2 ;
    

     

    演示:列出每个员工的id 和salary   要求显示符合salary等于1400的员工

    select id, salary from s_emp where salary=1400

    字符串条件的表达

    演示:要求显示first_name 是Carmen的员工,列出id  first_name salary 

    select id, first_name, salary from s_emp where first_name='Carmen'

    注意:一定要加’ ‘代表这是字符串值

    常见的运算符

    = 等于   != 不等于    >大于   < 小于    <= 小于等于   ................

     sql提供的运算符

    表达一个闭区间[a , b] 

    where  字段  between a  and  b ;  (字段在闭区间a到b内)

    a  b的顺序不能错

    演示:写程序查询,把s_emp表中id  first_name salary  显示;要求salary在[1450,2500 ] 中。

    select id, first_name, salary from s_emp where salary between 1450 and 2500

          注意:不可以把2500和1450调换位置,编译不会有错,但逻辑有错)

    where  字段  in(值1,值2,值3)

    这个字段的值等于其中的一个值(只要有一个等于就返回), 交换值的顺序可能有影响,也可能没有影响。若值的概率都一样就没有影响(就按一个规律写(比如从小到大),这样不容易遗漏)。若不一样,则把概率高的值放在前面(人为的),这样查询效率高(因为每个数据都要挨个和给的值比较,只要有一个一样就返回)

    演示:写一个查询,把s_emp表中部门标号是31或者32或者50 部门的员工id first_name  dept_id显示出来

    select idm first_name, dept_id from s_emp where dept_id in(31, 32, 50)

     

    模糊查询  like(像)+ 通配符

    数据库里:

      • “%”为通配符,代表0 - n个任意字符
      •  “-”代表一个任意字符

    e.g.  李四 李斯  李思  李世民 (查找出姓李的)

    Where  name  like  ‘李%’;

    e.g.  李小龙 小龙女  龙猫  (查找出所有带龙的)

    Where  name  like  ‘%龙%;
    (找出中间带龙的)where  name like  ‘_龙%’;

    演示:查询s_emp表中first_name,找出所有带a(小写a)的

    select first_name from s_emp where first_name like '%a%'

     

    数据库中有一张表user_tables(数据字典,存的都是大写)存了所有表的信息。例如s_emp  s_dept 等

    desc user

    演示:从user_tables中找出所有以‘S_’开头的表名

    注意:要对‘_’进行转义处理,用‘\_’表示下划线,再加escape  ‘ \ ’  代表是‘\’ 后面的内容进行转义处理

    select table_name from user_tables where table_name like 'S\_%'

    NULL值的判断

    where  字段  is NULL ;

    演示:把s_emp表中提成是10的员工的id  first_name commission_pct显示出来

    select id, first_name, commission_pct from s_emp where commission_pct=10

      

    演示:把s_emp表中提成不是10的员工的id first_name  commission_pct显示出来。

    select id, first_name, commission_pct from s_emp where commission_pct!=10

    按理来说,一共有25人,不为10的人应该是20个的,但是这里只有3个。这是因为,基本的判定对空值是无效的,必须引入is  NULL对控制进行判定所以要:

    select id, first_name, commission_pct from s_emp where commoission_pct is NULL

          当然也可以结合nvl,但是用is NULL是标准用法。

    条件连接符号

    • and  逻辑与
    • or   逻辑或
    • not  

    演示:(1)写程序查询,把s_emp表中id  first_name salary  显示;要求salary在[1450,2500 ] 中。(between 。。。and。。。)

    select id, first_name ,salary from s_emp where salary>=1450 and salary<=2500

    用这个更加具有通用性,可以是开区间。

    (2)写一个查询,把s_emp表中部门标号是31或者32或者50 部门的员工id first_name  dept_id显示出来(5.6.2里的in(。。,。。,。。))

    select id, first_name, dept_id from s_emp where dept_id-31 or dept_id-32 or dept_id=50

    这里三个都是等价的,不存在顺序问题。

    • >  的对立面是  <=
    •  <  的对立面是  >=
    •  =  的对立面是  !=   ^=   < >  (都是不等于)
    •  between a  and  b  的对立面是  not between  a  and  b
    •  in  的对立面是  not  in
    •  like  的对立面是  not like
    •  is  null  的对立面是  is not  null(只有最后一个不用注意空值,上面的都要注意空值)

     演示:找出manager_id不是空的员工,列出id  first_name manager_id

    select id, first_name, manager_id from s_emp where manager_id is not null

    条件优先的问题  要优先的部分加括号

    演示:(1)显示员工salar  dept_id;

        要求工资大于1000且部门标号为41的员工,或者部门标号为42的员工  

    select salary, dept_id from s_emp where salary>1000 and dept_id=41 or dept_id=42

    (2)显示员工salar  dept_id;

           要求部门标号为41的员工,或者为42的员工里工资大于1000的

    select salary, dept_id from s_emp where salary>1000 and (dept_id=41 or dept_id=42)

     

    转载于:https://www.cnblogs.com/cjaaron/p/9205351.html

    展开全文
  • 在如果使用parsed[0]._pprint_tree(),则可以看到嵌套在比较节点下所有内容:|- 2 Comparison 'employ...'| |- 0 Identifier 'employ...'| | `- 0 Name 'employ...'| |- 1 Whitespace ' '| |-...

    这是因为在关键字和比较中,树结构是不同的。例如,比较包括树中它下面的整个表达式。在

    如果使用parsed[0]._pprint_tree(),则可以看到嵌套在比较节点下的所有内容:|- 2 Comparison 'employ...'

    | |- 0 Identifier 'employ...'

    | | `- 0 Name 'employ...'

    | |- 1 Whitespace ' '

    | |- 2 Comparison '='

    | |- 3 Whitespace ' '

    | `- 4 Single ''Emplo...'

    但是,NOT IN子句是一系列顺序节点:

    ^{pr2}$

    最好的办法是观察标识符,然后向前跳并保存下一个括号节点的值。虽然这并不能处理所有可能的情况,但它确实处理您的SQL语句并返回job_profile_id的值。在

    这是我修改过的代码:import sqlparse

    s = "select count(*) from users where employee_type = 'Employee' AND (employment_status = 'Active' OR employment_status = 'On Leave') AND (time_type='Full time' OR country_code <> 'US') AND hire_date < NOW() AND email_work IS NOT NULL AND LENGTH(email_work) > 0 AND NOT (job_profile_id IN ('8802 - Comm Ops - 1', '8801 - CityOps - 2', '10034', '10455', '21014', '21015', '21016', '21018', '21017', '21019') AND country_code = 'IE') AND job_profile_id NOT IN ('20992', '20993', '20994', '20995', '20996', '20997') AND country_code NOT IN ('CN', 'MO', 'SG', 'MY', 'TH', 'VN', 'MM', 'KH', 'PH', 'ID')"

    parsed = sqlparse.parse(s)

    where = parsed[0][-1]

    sql_tokens = []

    def get_tokens(where):

    identifier = None

    for i in where.tokens:

    try:

    name = i.get_real_name()

    if name and isinstance(i, sqlparse.sql.Identifier):

    identifier = i

    elif identifier and isinstance(i, sqlparse.sql.Parenthesis):

    sql_tokens.append({

    'key': str(identifier),

    'value': token.value

    })

    elif name:

    identifier = None

    # sql_tokens.append("{0} - {1} - {2}".format(str(i), str(name), i.value))

    sql_tokens.append({

    'key': str(name),

    'value': u''.join(token.value for token in i.flatten()),

    })

    else:

    get_tokens(i)

    except Exception as e:

    pass

    get_tokens(where)

    print sql_tokens

    展开全文
  • 在Access2016数据库中一张表,有三个字段,字段以及相应数据如下: p n i ...这句话涉及自联结,难点在于where子句,本来想先看select子句,奈何t1表是在select主句中用到,所以比较难推理。
  • 最近在做项目 ,前台传过来一个表单map , 数据库查询时要查询含有表单数据的内容,比如:like %张三%,中间的内容是前台传过来的参数,我们该怎么去做呢?就需要CONCAT函数了。 话不多说,上代码 ...
  • 查询姓名是SMITH员工,字符串使用'',内容大小写敏感select*fromempwhereename='SMITH';总结:你所学过技术中,哪些是大小写敏感,哪些是大小写不敏感查询1980年12月17日入职员工,注意oracle默认日期格式(DD...
  • Where子句和Group By子句的...如果Group by 子句中不是对行组进行限制,而是进行单行限制那么应该尽量转换为WHERE子句的条件,这也是SQL优化的内容之一。  下面是一个例子: select t.product_type_id, avg(t.price)
  • 这里写自定义目录标题欢迎使用Markdown编辑器新改变功能快捷键合理创建标题,有助于目录生成如何改变文本样式插入链接与图片如何插入一段漂亮代码片生成一个适合你列表创建一个表格设定内容居中、居左、...
  • 本篇文章给大家带来的内容是关于mysql中select和where子句优化的总结,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。数据库优化:1.可以在单个SQL语句,整个应用程序,单个数据库服务器或多个联网...
  • 第十课 分组数据 #使用SQL的SELECT语句子句:GROUP BY子句和HAVING子句汇总表内容的子集 之前所有计算都是在表的所有数据或匹配特定的WHERE子句的数据上进行的 ...
  • SQLite中SELECT子句

    千次阅读 2018-04-10 10:56:01
    SQLite中SELECT子句目前为止,最常见SELECT语句由三个子句组成,分别为SELECT、FROM与WHERE。本小节我们首先讲解SELECT子句。SELECT子句可以用来定义最终结果表格式和内容。要显示在最终结果表中列必须由...
  • LIKE 通常与通配符 % 一起使用,% 表示通配 pattern 中未出现的内容。而不加通配符 % 的 LIKE 语法,表示精确匹配,其实际效果等同于 = 等于运算符。 LIKE 使用实例 下面是一个使用 LIKE 查询数据的例子: u
  • 2、where (case when)是调查元素性质,having是调查集合性质(多行问题处理) 3、根据大小关系生成子集时,就轮到非等值自连接上场了(用having求中位数) 4、(!!!)关系除法运算 (1)带余除法 笛卡尔积+...
  • WHERE字句

    2019-09-14 21:07:58
    主要内容: 数据库怎么限制里面数据; 数据库怎么排列里面数据。... WHERE子句: --WHERE字句起到是对数据库查询结果集限制作用 ----[WHERE condition(s)] ...
  • 条件查询:where子句后跟条件。首先,我们需要了解一些运算符。>,=,=.<>(不等于)between......andin(集合)likeis nulland 或者 &&or 或 ||not 或 !我们要查询这张学生表里的内容:查询年龄大...
  • 最近在看数据库视频-第六章第四节“分组”内容的时候遇到了一个问题提示:该列没有包含在聚合函数或group by 子句中。看到这个问题后我的思考是:问题一:什么是聚合函数?...where 子句的作用是在...
  • 测试表数据的内容日本English CharactersEnglish Characters日本日本English Characters其次是I have data stored in single column which are in English andChinese你的选择应该是这样的SELECT * FROM tabWHERE ...
  • 1. Join关键字,就是把多个表连接起来  而on和where都是条件,但是... 是一行一行的比较,然后联合起来,此时并没有判断where子句的内容  1.2. 关键字 Where 是针对所有表联合起来的 最终的数据,所以说它们的
  • 第四章 Oracle SQL和PL/... SELECT子句 一个SELECT命令通常可以分解为三个部分 查找什么数据 从哪里查找 查找条件是什么 故常用以下子句来表达 from p1,p2pn where <条件表达式> group by <分组内容> having <组内条
  • 使用where 过滤数据

    2019-09-29 09:41:47
    --本章主要内容是MySQL中使用where搜索条件进行过滤数据。 where条件在from子句后面给出,如下所示: select name,price from shops ...--where子句的位置,在同时使用order by 子句时,应该让order by 位于wher...
  • WHERE子句作用于基表或视图,从中选择满足条件元组。HAVING短语作用于组,从中选择满足条件组。where是从查询满足条件数据,用于查询数据之前;having用于在查出数据中挑选满足条件数据,在数据查出来之后...
  • MyBatis where标签

    2019-06-30 21:39:22
    而且,若最后的内容是“AND”或“OR”开头的,where 元素也知道如何将他们去除。 <select id="findActiveBlogLike" resultType="Blog"> SELECT * FROM BLOG <where> <if te...

空空如也

空空如也

1 2 3 4 5 ... 18
收藏数 343
精华内容 137
关键字:

where子句的内容是