资讯专栏INFORMATION COLUMN

sql 语句备忘录(walker)

wwolf / 1230人阅读

摘要:结构化查询语言简称,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询更新和管理关系数据库系统。

结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。

添加一个自增ID字段

ALTER TABLE tblname ADD COLUMN csmid COUNTER (0, 1)

access 创建一个有自增字段的表

CREATE TABLE tblname(id autoincrement, sname memo, ...)

删除一个字段

ALTER TABLE tblname DROP COLUMN csmid

sql server判断某个字段是否为空字符串

SELECT * FROM tblname where fieldname!=""
# OR
SELECT * FROM tblname where fieldname<>""

取某一列的最大值

SELECT MAX(fieldname) from tblname;

查询一个字段有哪几种取值

SELECT DISTINCT fieldname From tblname;

统计一个字段不同取值的数量,即有多少种取值。

SELECT COUNT(DISTINCT fieldname) FROM tblname;

统计一个字段的几种取值,并按统计量降序排列。

SELECT fieldname, COUNT(*)
FROM tblname
GROUP BY fieldname
ORDER BY COUNT(*) DESC;

统计学号相同,班级不同的学生

SELECT sno, COUNT(*) FROM
(
SELECT sno, sclass FROM students
GROUP BY sno, sclass
)
GROUP BY SNO
ORDER BY COUNT(*) DESC

ACCESS,在students表中将name字段中含有abc的字段放在前面。其他数据库可能要将INSTR换为CHARINDEX。在access中instr从1开始计数,而不是从0开始计数。

SELECT *
FROM students
ORDER BY INSTR(name, "abc") DESC;

Access 的 instr 函数切记注意第一个和第四个参数。(可参考这里)

设置和去除主键,参考这里。

# 设置主键
ALTER TABLE tblname ADD CONSTRAINT PrimaryKey Primary Key(主键字段名)
# 去除主键
ALTER TABLE tblname DROP CONSTRAINT PrimaryKey

ACCESS从数据库A复制表A到数据库B(新建了表B)。先连上数据库A,然后

SELECT * INTO tableB [IN "D:B.mdb"] FROM tableA

ACCESS从数据库A复制表A到数据库B(追加数据到表B)。先连上数据库A,然后

INSERT INTO tableB(field1, field2) [IN "D:B.mdb"] SELECT field1, field2 FROM tableA
# 当表结构完全相同,合并表时可以这么写:
INSERT INTO tableB [IN "D:B.mdb"] SELECT * FROM tableA

MySQL查询时将日期加8小时。(DATE_ADD函数)

SELECT DATE_ADD(datefiled, INTERVAL 8 HOUR ) FROM tbl;

MySQL清除空白可查阅 trim 和 replace 函数。

根据关键字段去重,需用到临时表。这里主要是提供思路,需根据具体数据库得到具体sql语句。(参考这里)

# 添加自增ID
select identity(int,1,1) as autoID, * into tmpTable from tableName
# 选出重复记录中值最小的自增ID
select min(autoID) as autoID into tmpTable2 from tmpTable group by keyField1, keyField2
# 得到最终结果
select * from tmpTable where autoID in(select autoID from tmpTable2)

ADO获取SELECT COUNT(*)的结果。

num = rs->GetCollect(_variant_t((long)0))

ADO 判断字段值是否为 NULL。

vField.vt ?= VT_NULL

ADO 访问 ACCESS 的 3092 错误的两种可能原因。

# date为保留字,应该加中括号 
SELECT date FROM tableName
# 这个中括号按说不应该影响的 
SELECT COUNT(*) FROM tableName WHERE field<>"[D2037"

ACCESS与外部其它数据交互 - IN子句,可参考这里。

VC++下使用ADO访问Access数据库完整篇

ACCESS单引号的转义字符是单引号,也就是说如果字段值中出现单引号,需用两个单引号表示。(可参考这里)

另外注意,字符串中若有nul字符,也会插入失败,这种情况比较难以排查。因为看起来的状况是,拷贝到access文件里面里能执行,而代码里不能执行。

设置表的autoid字段从10开始自增,每次增1。

ALTER TABLE tableName
ALTER COLUMN [autoid] COUNTER (10, 1)

ACCESS得到数据库中所有表名。

SELECT NAME FROM MSysObjects
WHERE TYPE=1 AND FLAGS=0

ACCESS 设置字段前导 0 示例

UPDATE tblname
SET fieldname=FORMAT(fieldname, "00000");

mysql无重复插入。(参考这里)

1)、无则插入,有则忽略。

/*某些版本的mysql会有一个警告*/
INSERT IGNORE INTO tblname(a,b,c) VALUES (1,2,3);    
/*不会有警告*/
INSERT INTO tblname(a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c;    

2)、无则插入,有则更新。

INSERT INTO tblname(a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1;

mssql(SQLServer)无重复插入,注意下面两个1并不是walker抽风了。(参考这里和那里)

INSERT INTO  tableName(keyA, keyB) SELECT valA, valB
 WHERE NOT EXISTS 
 (SELECT TOP 1 1 FROM tableName WHERE keyA=valA AND keyB=valB);

28、两表相减。(in、not in、exists、not exists)
1)、单字段。

SELECT field FROM tableA
WHERE field NOT IN
(
SELECT field FROM tableB
)

2)、多字段。

SELECT * FROM tableA
WHERE NOT EXISTS
(
SELECT * FROM tableB 
WHERE tableA.field1=tableB.field1 AND tableA.field2=tableB.field2
)

Access 跨文件连接查询。(Access 跨数据库查询和插入数据)

SELECT * FROM [;database=d:A.mdb].tblA,[;database=d:B.mdb].tblB
WHERE tblA.fieldA=tblB.fieldB;

SELECT * FROM tblA,[;database=d:B.mdb].tblB
WHERE tblA.fieldA=tblB.fieldB;

Access数据导入到 SQLServer 可用如下 Transact-SQL 语句。(参考这里)

INSERT INTO destTable
SELECT * FROM OPENROWSET ("Microsoft.Jet.OLEDB.4.0", "D:	est	est.mdb";"admin";"", srcTable);
INSERT INTO destTable
SELECT * FROM OPENROWSET ("Microsoft.ACE.OLEDB.12.0", "D:	est	est.mdb";"admin";"", srcTable);

查找以数字打头的数据。(MySQL,正则)

SELECT * FROM tableName WHERE fieldName REGEXP "^[0-9]" LIMIT 100;

MySQL 利用存储过程执行循环语句。

USE dbname;

DELIMITER $$  # 定义结束符为$$

DROP PROCEDURE IF EXISTS test_insert;  # 删除已有存储过程 

CREATE PROCEDURE test_insert()  # 创建新的存储过程
    BEGIN  
    DECLARE i INT DEFAULT 1;
    WHILE i<10  DO
        INSERT INTO tableName(idx) VALUES (i); 
        SET i=i+1;
    END WHILE;
    
END $$  # 结束定义语句

DELIMITER ;  # 恢复结束符为;

CALL test_insert();  # 调用存储过程

SQLite数据多表联合update( 注意:这种方式会伤害无关字段!

本文出自 walker snapshot

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/110808.html

相关文章

  • sql 语句忘录walker

    摘要:结构化查询语言简称,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询更新和管理关系数据库系统。 结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。 添加一个自增ID字段 ALTER TABLE tblname ADD CO...

    AaronYuan 评论0 收藏0
  • Python 获取 Access 表字段名

    摘要:时效说明的旧文迁移,某些地方可能过时,最后更新时间为以下所有代码均可用。打印指定文件指定表的所有字段关于字段类型为数字,为文本,为备忘。下有更简洁的函数,只需要填路径。 时效说明:walker 的旧文迁移,某些地方可能过时,最后更新时间为 2015-09-25 以下所有代码 Python2.7、Python3.4 均可用。 win32.com # encoding: utf-8 # a...

    yimo 评论0 收藏0
  • 【译】Nodejs应用安全忘录

    摘要:所以我们整理了一个应用安全备忘录,以帮助你在部署启动应用程序的时候进行安全检查。这可以保护应用程序不被攻击。应该用日志记录下来,而不是显示给用户。 本人的博客http://www.wjs.photo/,感兴趣的可以看看哦,基于NodeJs框架ThinkJs 本文翻译自 www.risingstack.com ,并非逐字逐句的翻译,有错误的地方请指出,谢谢啦 应用程序的安全就像是你房间里...

    Loong_T 评论0 收藏0
  • 【译】Nodejs应用安全忘录

    摘要:所以我们整理了一个应用安全备忘录,以帮助你在部署启动应用程序的时候进行安全检查。这可以保护应用程序不被攻击。应该用日志记录下来,而不是显示给用户。 本人的博客http://www.wjs.photo/,感兴趣的可以看看哦,基于NodeJs框架ThinkJs 本文翻译自 www.risingstack.com ,并非逐字逐句的翻译,有错误的地方请指出,谢谢啦 应用程序的安全就像是你房间里...

    ermaoL 评论0 收藏0
  • JPA2.1 中三个提升应用性能的新功能

    摘要:只用语句,也能完成很多事情,如果不够,你还可以调用数据库的特定功能和存储过程。在中,并没有针对存储过程的实际支持,本地查询是调用存储过程的唯一方式。规范引入了几个新的功能以应对这些低效操作,比如实体图,条件更新和存储过程查询。 经常在网上看到开发者们抱怨 JPA 性能低下的帖子或文章,但如果仔细查看这些性能问题,常会发现导致问题的根本原因大致包括以下几个: 使用过多的 SQL 查询从...

    Codeing_ls 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<