22
Sun, Dec
3 New Articles

SQL 101: A Simple Way to Add Data to the DB: the Insert Statement

SQL
Typography
  • Smaller Small Medium Big Bigger
  • Default Helvetica Segoe Georgia Times

You've learned how to query the database with Select; the next logical step is to learn how to add data to your tables. You can do that with RPG and DFU, but SQL's Insert statement provides an interesting alternative.

 

RPG and DFU provide ways to add new records to your files. RPG forces you to write a program, regardless of how simple or small the data you want to add is, and DFU is a not the friendliest tool to manipulate data. It can be useful to quickly change a couple of records, but it's not adequate for massive data insertion. SQL's Insert provides an interesting functionality, somewhere between the flexibility-yet-slowness of the RPG program and the quickness-yet-unfriendliness of the DFU tool. Let's take a look this SQL instruction.

 

The Insert SQL instruction works in one of two ways: you can either specify the values for the fields that you want to add to the table, issuing an INSERT statement for each new row, or you can insert rows via a Select statement; think of this as a selective CPYF CL command. Let's start with the row-by-row Insert; its syntax is as follows:

 

INSERT INTO <table>

(column1, column2, ..., columnN)

VALUES (value-for-column1, value-for-column2, ..., value-for-columnN )

 

Just like the SELECT statement from a couple of articles ago (SQL 101: The Simplicity and Flexibility of the SELECT Statement) , this statement also has some mandatory reserved words. In this case, INSERT INTO must precede the table in which the data will be inserted and, in this first syntax, VALUE is required to signal the list of values to insert. Note that column1, column2, etc. represent actual column names; value-for-column1, value-for-column2, etc. are the values to insert into the respective columns, and they can be as simple as constant literals or as complex as expressions that include operators and functions. If the value-for-column is not compatible with the respective column data type, the Insert statement ends in error. If you're providing values for all the table's columns you can omit the (column1, column2, ..., columnN) part of the statement. However, I prefer to avoid ambiguity and specify all the column names. You might want to reuse the statement later, and if a column was added in the meantime things might not work as you expect. If you're only specifying a few values, name those columns and nothing else. You have to be aware that the columns for which you're not specifying a value will be filled with the respective default values, blanks or zeros for non-nullable columns (the default for a physical file) or null for nullable columns (SQL table's default).

 

Let's analyze an example; for simplicity sake, I'll use an oversimplified Item Master table named ItmMst. This table has two columns, ItemID, a CHAR(15), and ItemDesc, a CHAR(40). The following statement inserts a new row in the ItmMst table:

 

INSERT INTO ItmMst

(ItemID, ItemDesc)

VALUES ('B52', 'Brand new fictitious item from ACME')

 

That was easy, right? The method has pros and cons; while you retain full control over what's inserted, you also have to issue a statement for each record you want to insert. The alternative syntax of the Insert instruction opens the possibility of inserting multiples lines at a time, but it comes with a cost: you may lose some control over what's inserted. This alternative syntax is as follows:

 

INSERT INTO <table>

(column1, column2, ..., columnN)

SELECT              <other_column 1>

                    [, <other_column 2>, …., <other_columnN>

FROM                <other_table>

[WHERE              <condition 1> <logical operator> <condition 2>, etc]

 

No, it's not a copy/paste error: Insert's alternative syntax uses a SELECT statement to specify the values to insert. It may sound a bit strange, but it's extremely useful. Picture the following scenario: you need to add items to the inventory master file I mentioned in the previous article via a cargo manifest file you just received, but you need to create the item descriptions that don't exist in the ItmMst table first. To make things easier, imagine that the cargo manifest file, named CargoM, also has columns named ItemID and ItemDesc; the first step is to check if there are item IDs in the manifest file that don't match the IDs in the ItmMst table:

 

SELECT       DISTINCT ItemID, ItemDesc

FROM         CargoM

WHERE        ItemID NOT IN (Select ItemID From ItmMst)

 

Don't panic. I'll explain this step by step: remember the IN operator I presented earlier in this series' second article? As you can see here, it can also be used to search the results of a SELECT statement; by the way, a SELECT inside another instruction is commonly called subselect. You can have as many as you want, but this can seriously affect performance and lead to unexpected results, so use it carefully and scarcely. The subselect is processed first and returns a list. Each of CargoM's unique IDs is then compared with this list, using the IN predicate. Why the unique and not all? Because of the DISTINCT keyword; this acts kind of like a GROUP BY clause, returning unique values or, if you prefer, discarding duplicates. This statement produces a two-column list of all the item ids and descriptions that exist in the cargo manifest file but don't exist in the ItmMst table. Now I can use the statement to insert those items in the ItmMst table. Here's how:

 

INSERT INTO  ItmMst ItmMst

(ItmMst.ItemID, ItmMst.ItemDesc)

SELECT       DISTINCT CM.ItemID, CM.ItemDesc

FROM         CargoM CM

WHERE        CM.ItemID NOT IN (Select ItemID From ItmMst)

 

The only possible problem here is that, even though I can reuse this statement, it's not immediately obvious what data will be inserted into the ItmMst table. This is what I meant earlier when I said that you may lose some control over what's inserted when this alternative syntax is used.

 

This is the basic information about Insert. Go ahead and try it yourself. Just try not to clutter your files with useless test data! The next article will continue to focus on DML, explaining the Update statement, a real timesaver that can potentially free you from DFU. Until then, share your thoughts, doubts, and suggestions in the comments section.

BLOG COMMENTS POWERED BY DISQUS

LATEST COMMENTS

Support MC Press Online

$

Book Reviews

Resource Center

  • SB Profound WC 5536 Have you been wondering about Node.js? Our free Node.js Webinar Series takes you from total beginner to creating a fully-functional IBM i Node.js business application. You can find Part 1 here. In Part 2 of our free Node.js Webinar Series, Brian May teaches you the different tooling options available for writing code, debugging, and using Git for version control. Brian will briefly discuss the different tools available, and demonstrate his preferred setup for Node development on IBM i or any platform. Attend this webinar to learn:

  • SB Profound WP 5539More than ever, there is a demand for IT to deliver innovation. Your IBM i has been an essential part of your business operations for years. However, your organization may struggle to maintain the current system and implement new projects. The thousands of customers we've worked with and surveyed state that expectations regarding the digital footprint and vision of the company are not aligned with the current IT environment.

  • SB HelpSystems ROBOT Generic IBM announced the E1080 servers using the latest Power10 processor in September 2021. The most powerful processor from IBM to date, Power10 is designed to handle the demands of doing business in today’s high-tech atmosphere, including running cloud applications, supporting big data, and managing AI workloads. But what does Power10 mean for your data center? In this recorded webinar, IBMers Dan Sundt and Dylan Boday join IBM Power Champion Tom Huntington for a discussion on why Power10 technology is the right strategic investment if you run IBM i, AIX, or Linux. In this action-packed hour, Tom will share trends from the IBM i and AIX user communities while Dan and Dylan dive into the tech specs for key hardware, including:

  • Magic MarkTRY the one package that solves all your document design and printing challenges on all your platforms. Produce bar code labels, electronic forms, ad hoc reports, and RFID tags – without programming! MarkMagic is the only document design and print solution that combines report writing, WYSIWYG label and forms design, and conditional printing in one integrated product. Make sure your data survives when catastrophe hits. Request your trial now!  Request Now.

  • SB HelpSystems ROBOT GenericForms of ransomware has been around for over 30 years, and with more and more organizations suffering attacks each year, it continues to endure. What has made ransomware such a durable threat and what is the best way to combat it? In order to prevent ransomware, organizations must first understand how it works.

  • SB HelpSystems ROBOT GenericIT security is a top priority for businesses around the world, but most IBM i pros don’t know where to begin—and most cybersecurity experts don’t know IBM i. In this session, Robin Tatam explores the business impact of lax IBM i security, the top vulnerabilities putting IBM i at risk, and the steps you can take to protect your organization. If you’re looking to avoid unexpected downtime or corrupted data, you don’t want to miss this session.

  • SB HelpSystems ROBOT GenericCan you trust all of your users all of the time? A typical end user receives 16 malicious emails each month, but only 17 percent of these phishing campaigns are reported to IT. Once an attack is underway, most organizations won’t discover the breach until six months later. A staggering amount of damage can occur in that time. Despite these risks, 93 percent of organizations are leaving their IBM i systems vulnerable to cybercrime. In this on-demand webinar, IBM i security experts Robin Tatam and Sandi Moore will reveal:

  • FORTRA Disaster protection is vital to every business. Yet, it often consists of patched together procedures that are prone to error. From automatic backups to data encryption to media management, Robot automates the routine (yet often complex) tasks of iSeries backup and recovery, saving you time and money and making the process safer and more reliable. Automate your backups with the Robot Backup and Recovery Solution. Key features include:

  • FORTRAManaging messages on your IBM i can be more than a full-time job if you have to do it manually. Messages need a response and resources must be monitored—often over multiple systems and across platforms. How can you be sure you won’t miss important system events? Automate your message center with the Robot Message Management Solution. Key features include:

  • FORTRAThe thought of printing, distributing, and storing iSeries reports manually may reduce you to tears. Paper and labor costs associated with report generation can spiral out of control. Mountains of paper threaten to swamp your files. Robot automates report bursting, distribution, bundling, and archiving, and offers secure, selective online report viewing. Manage your reports with the Robot Report Management Solution. Key features include:

  • FORTRAFor over 30 years, Robot has been a leader in systems management for IBM i. With batch job creation and scheduling at its core, the Robot Job Scheduling Solution reduces the opportunity for human error and helps you maintain service levels, automating even the biggest, most complex runbooks. Manage your job schedule with the Robot Job Scheduling Solution. Key features include:

  • LANSA Business users want new applications now. Market and regulatory pressures require faster application updates and delivery into production. Your IBM i developers may be approaching retirement, and you see no sure way to fill their positions with experienced developers. In addition, you may be caught between maintaining your existing applications and the uncertainty of moving to something new.

  • LANSAWhen it comes to creating your business applications, there are hundreds of coding platforms and programming languages to choose from. These options range from very complex traditional programming languages to Low-Code platforms where sometimes no traditional coding experience is needed. Download our whitepaper, The Power of Writing Code in a Low-Code Solution, and:

  • LANSASupply Chain is becoming increasingly complex and unpredictable. From raw materials for manufacturing to food supply chains, the journey from source to production to delivery to consumers is marred with inefficiencies, manual processes, shortages, recalls, counterfeits, and scandals. In this webinar, we discuss how:

  • The MC Resource Centers bring you the widest selection of white papers, trial software, and on-demand webcasts for you to choose from. >> Review the list of White Papers, Trial Software or On-Demand Webcast at the MC Press Resource Center. >> Add the items to yru Cart and complet he checkout process and submit

  • Profound Logic Have you been wondering about Node.js? Our free Node.js Webinar Series takes you from total beginner to creating a fully-functional IBM i Node.js business application.

  • SB Profound WC 5536Join us for this hour-long webcast that will explore:

  • Fortra IT managers hoping to find new IBM i talent are discovering that the pool of experienced RPG programmers and operators or administrators with intimate knowledge of the operating system and the applications that run on it is small. This begs the question: How will you manage the platform that supports such a big part of your business? This guide offers strategies and software suggestions to help you plan IT staffing and resources and smooth the transition after your AS/400 talent retires. Read on to learn: