SQL 多列查询 not in, not exists 写法

1.not  in:

 select * from table where (field1,field2,field3) not in (select field1,field2,field3 from table)

注意 其中字段有🈳️值的情况会导致查不到结果集,数据量大会导致查询缓慢

2.not exists :

select * from table t1 where  not exists (select field1,field2,field3 from table t2 and t1.field1=t2.field1 and t1.field2=t2.field2 and t1.field3=t2.field3 )
 

### ClickHouse SQL语法概述 ClickHouse支持标准SQL语句的同时也引入了一些特有的扩展功能来优化性能和简化复杂操作。对于大多数常见的SQL查询,ClickHouse遵循ANSI SQL规范[^1]。 #### 基本SELECT查询 最简单的`SELECT`语句用于从单个表中检索数据: ```sql SELECT column_name_1, column_name_2 FROM table_name; ``` 此命令返回指定列的数据行集合。如果想要获取所有列,则可以使用星号(*)代替具体的列名列表。 #### 使用WHERE条件过滤 为了只提取满足一定条件的数据记录,在`SELECT`之后可加入`WHERE`子句来进行筛选: ```sql SELECT * FROM users WHERE age >= 18 AND city = 'Beijing'; ``` 这段代码会选择年龄大于等于18岁且居住在北京的所有用户的全部字段信息。 #### 排序与分组 通过`ORDER BY`关键字能够按照某一列或多列对结果集进行升序(ASC)或降序排列(Desc),而`GROUP BY`则允许按某些属性聚合相同类型的条目并执行汇总计算: ```sql -- 对成绩由高到低排序取前两名的成绩 SELECT * FROM ( SELECT * FROM scores ORDER BY grade DESC LIMIT 2 BY student_id -- 每位学生最多保留两个最高分项 ) ORDER BY name ASC; -- 外层再对学生姓名做一次正向排序 ``` 上述例子展示了如何嵌套子查询以实现更复杂的逻辑处理,这里特别注意到了`LIMIT ... BY`这种特殊的用法,它可以在每组内部限制输出数量[^3]。 #### 数据插入 当需要向现有表格添加新纪录时,通常采用如下形式的INSERT语句: ```sql INSERT INTO my_table (column1, column2,...) VALUES(value1,value2,...),(valueA,valueB,...); ``` 值得注意的是,在执行`INSERT`操作期间,系统不仅依赖于完整的SQL解析器还额外启用了专门针对输入格式优化过的快速流式解析机制,从而提高了大批量写入场景下的效率[^2]。 #### 用户权限管理 利用DCL(Data Control Language)中的GRANT/REVOKE命令可以有效地管理和分配不同用户之间的资源访问权限: ```sql CREATE USER IF NOT EXISTS analyst IDENTIFIED WITH no_password; GRANT SELECT ON database.table TO analyst; ``` 这些指令帮助管理员设置精细粒度的安全策略,确保只有授权人员才能接触敏感资料[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值